抽象工厂模式就是用来实现创建一系列的产品解决方案的模式。跟工厂方法不同,工厂方法是争对单一产品的创建,比如以前例子中的手机,都是创建这个产品,而抽象工厂不但要创建手机,而且还要创建对应的耳机,而且要去创建的2个或者多个对象是有联系的。
下面看例子:
1、抽象工厂A 对一系统产品创建的接口
public interface AbstractFactory {
public CPU createCPU();
public MainBoard createMainBoard();
}
2、具体的2个方案
public class SchemaA implements AbstractFactory {
@Override
public CPU createCPU() {
return new AMDCPU(939);
}
@Override
public MainBoard createMainBoard() {
return new MSIMainBoard(939);
}
}
public class SchemaB implements AbstractFactory {
@Override
public CPU createCPU() {
return new INTELCPU(1156);
}
@Override
public MainBoard createMainBoard() {
return new MSIMainBoard(1156);
}
}
这里可以看来生成2个产品是有联系的,上面的例子就是里面的针脚相同,如果2个产品之间没有联系,我们采用2次工厂方法就可以实现。
3、2个产品的接口
public interface MainBoard {
public void installCPU();
}
public interface CPU {
public void calculate();
}
4、2个产品的实现
public class GAMainBoard implements MainBoard {
private final int cpuHoles;
public GAMainBoard(int cpuHoles) {
this.cpuHoles = cpuHoles;
}
@Override
public void installCPU() {
System.out.println("GA MainBoard has " + cpuHoles + " cpuHoles");
}
}
public class MSIMainBoard implements MainBoard {
private final int cpuHoles;
public MSIMainBoard(int cpuHoles) {
this.cpuHoles = cpuHoles;
}
@Override
public void installCPU() {
System.out.println("MSI MainBoard has " + cpuHoles + " cpuHoles");
}
}
public class INTELCPU implements CPU {
private final int pins;
public INTELCPU(int pins) {
this.pins = pins;
}
@Override
public void calculate() {
System.out.println("INTEL CPU has " + pins + " pins");
}
}
public class AMDCPU implements CPU {
private final int pins;
public AMDCPU(int pins) {
this.pins = pins;
}
@Override
public void calculate() {
System.out.println("AMD CPU has " + pins + " pins");
}
}
5、组装类相当于工厂方法
public class ComputerEngineer {
private CPU cpu;
private MainBoard mainBoard;
public void makeComputer(AbstractFactory schmema) {
this.cpu = schmema.createCPU();
this.mainBoard = schmema.createMainBoard();
cpu.calculate();
mainBoard.installCPU();
}
}
6、Main方法
public class Main {
public static void main(String[] args) {
ComputerEngineer ce = new ComputerEngineer();
ce.makeComputer(new SchemaA());
}
}
最后说下优点跟缺点
优点:
1、分离接口跟实现 这点跟工厂方法一样
2、实现方法的切换
缺点:
1、扩展困难,如果上面的例子我们要添加一个内存,那就要改很多 这点跟工厂方法一样
2、增加了很多代码量,上面的例子里面我们只实现了2个方案,如果有配上内存,那就大量的备选方案。
具体应用:
在DAO层可以大量应用 明天继续完成一个DAO的应用
分享到:
相关推荐
java设计模式 抽象工厂模式详解 一张图让你彻底明白抽象工厂模式
介绍的是工厂模式 包括简单工厂模式、工厂方法模式、抽象工厂模式 包括PPT和代码
设计模式-抽象工厂模式(讲解及其实现代码)
工厂方法模式和抽象工厂模式的区别,对工厂方法模式和抽象工厂模式做了简单的比较
设计模式 抽象工厂模式 反射 配置文件 设计模式 抽象工厂模式 反射 配置文件 设计模式 抽象工厂模式 反射 配置文件 设计模式 抽象工厂模式 反射 配置文件 设计模式 抽象工厂模式 反射 配置文件 设计模式 抽象工厂...
深入浅出设计模式之抽象工厂模式+工厂方法模式+策略模式实现手机加工厂(加类图)
抽象工厂模式ppt。抽象工厂模式ppt。抽象工厂模式ppt。
设计模式--抽象工厂模式实现多数据库连接 设计模式,.net设计模式,抽象工厂
java设计模式【之】抽象工厂模式【源码】【场景:制作咖啡】 * 抽象工厂 * * 创建对象实例时,不要直接 new 类, 而是把这个new 类的动作放在一个工厂的方法中,并返回。 * 在工厂方法的基础上,进一步抽象工厂...
设计模式 - 抽象工厂模式
抽象工厂模式(Abstract Factory Pattern) 引入: 在前面介绍的两个创建型模式里面,我们解决的都是有关"new"的问题,用它们来避免显式指定类创建对象。我写的也非常简单易懂,相信看过的朋友们都应该对简单工厂...
抽象工厂模式.ppt抽象工厂模式.ppt
通过C++实现了简单工厂模式、工厂模式、抽象工厂模式三大设计模式的经典案例。
设计模式 抽象工厂模式 三层架构 设计模式 抽象工厂模式 三层架构 设计模式 抽象工厂模式 三层架构 设计模式 抽象工厂模式 三层架构 设计模式 抽象工厂模式 三层架构 要您一个资源分,也算是对我的尊重,谢谢下载。
抽象工厂模式实现计算器源码,学习C#设计模式。
在C#项目开发中设计模式中的抽象工厂模式应用实例实现。
抽象工厂模式的实现源代码,清晰易懂,还有详细的说明
通过抽象工厂搜提供的接口,可以创建产品的家族,利用这个接口书写代码,我们...这是与博客《抽象工厂模式--GOF的23个之一》配套实例源代码,具体说明欢迎阅读。 如有好的建议,可留言或发至笔者邮箱:fzb_xxzy@163.com
项目需求: 有两间塑料加工厂(A厂仅生产容器类产品;B厂仅生产模具类产品);... 抽象工厂模式以一种倾斜的方式支持增加新的产品,它为新产品族的增加提供方便,而不能为新的产品等级结构的增加提供这样的方便。
c++ java 抽象工厂模式