抽象工厂模式(Abstract Factory)
来源:互联网 发布:软件著作权申请登记 编辑:程序博客网 时间:2024/06/04 00:32
抽象工厂模式(Abstract Factory)
为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。
抽象工厂是工厂模式的升级版,他用来创建一组相关或者相互依赖的对象。来看下抽象工厂模式的类图:
前面咱们说的工厂模式,类的创建依赖工厂类,程序需要扩展时,我们必须创建新的工厂类。工厂类是用来生产产品的,那我们也可以把“工厂类当成我们要生产的产品”,所以抽象工厂就是“工厂的工厂”,即生产工厂的工厂。
通过一个例子,来加深对抽象工厂的理解。
//CPU工厂接口public interface CPUFactory { public void createCPU();}
//IntelCPU工厂public class IntelCPU implements CPUFactory { @Override public void createCPU() { System.out.println("Intel CPU"); }}
//AMDCPU工厂public class AMDCPU implements CPUFactory { @Override public void createCPU() { System.out.println("AMD CPU"); }}
//创建抽象工厂类接口public interface Provider { public CPUFactory createCPUFactory();}
public class InterCPUFactory implements Provider { @Override public CPUFactory createCPUFactory() { return new InterCPU(); }}
public class AMDCPUFactory implements Provider { @Override public CPUFactory createCPUFactory() { return new AMDCPU(); }}
public static void main(String[] args) { //创建一个生产CPU工厂的工厂 Provider cpufactory = new InterCPUFactory(); //通过CPU工厂的工厂创建一个IntelCPU工厂 CPUFactory intelcpu = cpufactory.createCPUFactory(); //IntelCPU工厂生产intelCPU intelcpu.createCPU(); }
总结
抽象工厂的优点:
- 抽象工厂模式除了具有工厂方法模式的优点外,最主要的优点就是可以在类的内部对产品族进行约束。所谓的产品族,一般或多或少的都存在一定的关联(例如不同厂商生产CPU)。
适用场景:
- 一个继承体系中,如果存在着多个等级结构(即存在着多个抽象类),并且分属各个等级结构中的实现类之间存在着一定的关联或者约束,就可以使用抽象工厂模式。
Test
package com.qbz.test;//汽车工厂interface CarFactory { void productCar();}// 抽象工厂,汽车工厂的工厂interface Provider { CarFactory creatCarFactory();}// 保时捷工厂class PorscheFactory implements CarFactory { @Override public void productCar() { System.out.println("生产保时捷汽车"); }}// 拖拉机工厂class TractorFactory implements CarFactory { @Override public void productCar() { System.out.println("生产拖拉机"); }}// 生产保时捷工厂的工厂class SuperPorscheFactory implements Provider { @Override public CarFactory creatCarFactory() { return new PorscheFactory(); }}// 补全 生产拖拉机工厂的工厂class SuperTractorFactory implements Provider { @Override public CarFactory creatCarFactory() { return new TractorFactory(); }}public class AbstractFactory { public static void main(String[] args) { // 创建一个生产保时捷工厂的工厂 Provider cf = new SuperPorscheFactory(); // 生产保时捷工厂 CarFactory pf = cf.creatCarFactory(); // 保时捷工厂生产保时捷汽车 pf.productCar(); // 创建一个生产拖拉机工厂的工厂 Provider tr = new SuperTractorFactory(); // 生产拖拉机工厂 CarFactory tf = tr.creatCarFactory(); // 拖拉机工厂生产拖拉机 tf.productCar(); }}
输出:
生产保时捷汽车生产拖拉机
1 0
- 抽象工厂模式(Abstract Factory)
- Abstract Factory(抽象工厂模式)
- Abstract Factory抽象工厂模式
- 抽象工厂(Abstract Factory)模式
- Abstract Factory 抽象工厂模式
- Abstract Factory 抽象工厂模式
- 抽象工厂(Abstract Factory)模式
- 抽象工厂模式(Abstract Factory)
- 抽象工厂模式(Abstract Factory)
- 抽象工厂模式(Abstract Factory)
- Abstract Factory 抽象工厂模式
- 抽象工厂模式(Abstract Factory)
- 抽象工厂模式(Abstract Factory)
- 抽象工厂模式(Abstract Factory)
- 抽象工厂模式(Abstract Factory)
- 抽象工厂模式(Abstract Factory)
- 抽象工厂模式 - Abstract Factory
- Abstract Factory 抽象工厂模式
- jQuery中的高度与定位
- 【Linux】CentOS 7通过Firewall开放防火墙端口
- NYOJ 929 密码宝盒(待续)
- ZKW Splay
- cocos2dx加载网络图片&图片流加载显示
- 抽象工厂模式(Abstract Factory)
- 四、线性表(1)
- (8)HTML5-图片
- 学习16位DOS汇编笔记
- linux sed 批量替换多个文件中的字符串
- 文章标题
- 深入分析const关键字模型
- 【DP算法篇之初学】背包问题
- 【Linux】tar.xz的解压命令