【java设计模式系列】3. 抽象工厂模式(Abstract Factory)
时间:2022-07-25
本文章向大家介绍【java设计模式系列】3. 抽象工厂模式(Abstract Factory),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
假设现在有一个车辆制造工厂,它生产两种车,A类车和B类车,每类车有其各自的车门和轮子,这就需要不同的车间来做,A类车的车间有生产车门的工作,有生产轮子的工作,B类车的车间有生产车门的工作,有生产轮子的工作,我们需要哪类车的部件时,就去哪个车间拿,拿的过程(相同的操作,抽取出来一个抽象工厂类,这里的拿就是指方法)是一样的。
下面用代码具体实现:
代码清单1:生产门(抽象产品)
public interface Door {
void createDoor();
}
代码清单2:生产A门(具体产品)
public class DoorA implements Door {
@Override
public void createDoor() {
System.out.println("create door A.");
}
}
代码清单3:生产B门(具体产品)
public class DoorB implements Door{
@Override
public void createDoor() {
System.out.println("create door B.");
}
}
代码清单4:生产轮子(抽象产品)
public interface Wheel {
void createWheel();
}
代码清单5:生产A轮子(具体产品)
public class WheelA implements Wheel {
@Override
public void createWheel() {
System.out.println("create wheel A.");
}
}
代码清单6:生产B轮子(具体产品)
public class WheelB implements Wheel {
@Override
public void createWheel() {
System.out.println("create wheel B.");
}
}
代码清单7:抽象工厂
public abstract class AbstractFactory {
public abstract void createDoor();
public abstract void createWheel();
}
代码清单8:具体A工厂
public class FactoryA extends AbstractFactory {
@Override
public void createDoor() {
new DoorA().createDoor();
}
@Override
public void createWheel() {
new WheelA().createWheel();
}
}
代码清单9:具体B工厂
public class FactoryB extends AbstractFactory {
@Override
public void createDoor() {
new DoorB().createDoor();
}
@Override
public void createWheel() {
new WheelB().createWheel();
}
}
代码清单10:测试类
public class Test {
public static void main(String[] args) {
new FactoryA().createDoor();
new FactoryA().createWheel();
new FactoryB().createDoor();
new FactoryB().createWheel();
}
}
输出结果:
create door A.
create wheel A.
create door B.
create wheel B.
总结:
抽象工厂模式相对于工厂方法模式来说,每个具体工厂可以生产一族产品(即多种产品);而工厂方法模式是具体工厂生产相应的具体产品,只能生产一种产品。当产品族中只有一种产品时抽象工厂模式退化成工厂方法模式。
附抽象工厂类图:
原文地址:http://men4661273.iteye.com/blog/1637880
- AVFoundation 框架初探究(二)
- 关于视图和存储过程的权限问题探究 (r9笔记第87天)
- Java基础-day08-超市购物系统总结
- AVFoundation 框架初探究(一)
- 【Go 语言社区】 HTML5 前端--数据保存实例
- crontab设置导致的服务器进程异常问题 (r10笔记第4天)
- 一条SQL语句的执行计划变化探究(r10笔记第3天)
- tensorflow(一)windows 10 python3.6安装tensorflow1.4与基本概念解读
- 基于AgileEAS.NET SOA 中间件领域模型数据器快速打造自己的代码生成器
- Java基础-day07-代码题-自定义数据类型;ArrayList集合
- 一条报警信息的快速处理和分析(r9笔记第99天)
- 【Go 语言社区】解析Go语言编程中的struct结构
- centos+scala2.11.4+hadoop2.3+spark1.3.1环境搭建
- 【Go 语言社区】Golang 语言获取本机逻辑CPU数量的方法
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 1. Pandas系列 - 基本数据结构
- 6 年前,只会 JSP 和 Servlet 就可以找到工作
- Python文件处理实用指南
- 2. Pandas系列 - Series基本功能
- 1.3 广告算法专题 - 交叉验证
- 最好用的内网穿透工具合集
- JVM垃圾回收之垃圾回收器,程序员必须掌握的知识
- 5分钟Flink - 时间与语义案例详解
- 5分钟Flink - 时间语义和Watermark
- 3. Pandas系列 - DataFrame操作
- 4. Pandas系列 - 基本功能和统计操作
- 面经手册 · 第8篇《LinkedList插入速度比ArrayList快?你确定吗?》
- 无所不能的Embedding 2. FastText词向量&文本分类
- 5. Pandas系列 - 重建索引
- 6. Pandas系列 - 迭代