设计模式---抽象工厂模式
来源:互联网 发布:gmp软件 编辑:程序博客网 时间:2024/05/29 11:33
定义
抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。
理解
抽象工厂模式中有两个比较重要的概念:产品等级结构、产品族。
- 产品等级结构:产品等级结构即产品的继承结构,如一个抽象类是汽车,子类有丰田汽车、奔驰汽车、宝马汽车,则汽车和具体品牌的汽车构成了产品等级结构。
- 产品族:所谓的产品族,是指位于不同产品等级结构中功能相关联的产品组成的家族。例如丰田工厂生产的丰田发动机,丰田变速箱,丰田底盘。
抽象工厂模式与工厂方法模式最大的不同在于,工厂方法模式针对的是同一产品等级结构,而抽象工厂模式针对的是产品族。
抽象工厂模式和工厂模式一样都有4个角色:抽象工厂、具体工厂、抽象产品、具体产品。
但是抽象工厂拥有多个抽象产品,而工厂方法模式只有一个。
例子
拿汽车工厂来说
有三种产品:发动机、变速箱、底盘,以及两个工厂:A工厂、B工厂。其中A工厂生产A发动机、A变速箱、A底盘,而B工厂生产B发动机、B变速箱、B底盘。
其中:A发动机和B发动机是同一产品等级,A变速箱和B变速箱是同一产品等级,A底盘和B底盘是同一产品等级。这就构成了产品族,需要用到抽象产品模式。
UML图
代码
3种产品的产品接口:
public interface Engine { public String getEngineName();}public interface GearBox { public String getGearBoxName();}public interface Chassis { public String getChassisName();}
2个工厂所生产的6个具体产品类:
public class EngineA implements Engine { @Override public String getEngineName() { return "EngineA"; }}public class EngineB implements Engine { @Override public String getEngineName() { return "EngineB"; }}public class GearBoxA implements GearBox { @Override public String getGearBoxName() { return "GearBoxA"; }}public class GearBoxB implements GearBox { @Override public String getGearBoxName() { return "GearBoxB"; }}public class ChassisA implements Chassis { @Override public String getChassisName() { return "ChassisA"; }}public class ChassisB implements Chassis { @Override public String getChassisName() { return "ChassisB"; }}
工厂抽象:
public interface CarFactory { Engine createEngine(); GearBox createGearBox(); Chassis createChassis();}
2个具体工厂:
public class ACarFactory implements CarFactory { @Override public Engine createEngine() { return new EngineA(); } @Override public GearBox createGearBox() { return new GearBoxA(); } @Override public Chassis createChassis() { return new ChassisA(); }}public class BCarFactory implements CarFactory { @Override public Engine createEngine() { return new EngineB(); } @Override public GearBox createGearBox() { return new GearBoxB(); } @Override public Chassis createChassis() { return new ChassisB(); }}
测试:
CarFactory a = new ACarFactory();CarFactory b = new BCarFactory();Engine engine_a = a.createEngine();Engine engine_b = b.createEngine();GearBox gearBox_a = a.createGearBox();GearBox gearBox_b = b.createGearBox();Chassis chassis_a = a.createChassis();Chassis chassis_b = b.createChassis();Log.e("ZXK","engine_a:"+engine_a.getEngineName()+",engine_b:"+engine_b.getEngineName()); Log.e("ZXK","gearBox_a:"+gearBox_a.getGearBoxName()+",gearBox_b:"+gearBox_b.getGearBoxName()); Log.e("ZXK","chassis_a:"+chassis_a.getChassisName()+",chassis_b:"+chassis_b.getChassisName());
抽象工厂模式 和 工厂方法模式
- 抽象工厂模式中用到了工厂模式:在抽象工厂模式中,抽象工厂接口中有抽象工厂方法(例如:createEngine()、createGearBox()、createChassis()),具体工厂覆盖这些方法来创建具体的产品。这其实就用到了工厂方法模式。
- 抽象工厂模式针对的是产品族,而工厂方法模式针对的是产品等级结构: 抽象工厂模式中,每个具体工厂可以实例化一系列对象,而工厂方法模式中的具体工厂只能创建一个具体产品实例。
- 抽象工厂模式中有多个抽象产品,而工厂方法模式中只有一个。
阅读全文
0 0
- 抽象工厂设计模式
- 设计模式-----抽象工厂
- 抽象工厂设计模式
- 抽象工厂设计模式
- 抽象工厂设计模式
- 设计模式 抽象工厂
- 设计模式--抽象工厂
- 设计模式--抽象工厂
- 设计模式 抽象工厂
- 设计模式-抽象工厂
- 设计模式-> 抽象工厂
- 抽象工厂设计模式
- 设计模式--抽象工厂
- 【设计模式】抽象工厂
- 设计模式---抽象工厂
- 【设计模式-抽象工厂】
- 设计模式-抽象工厂
- 设计模式--抽象工厂
- 类与类的关系杂谈
- Lua学习笔记4-赋值语句
- Percona Server5.7.17二进制安装_for redhat 6.1
- 机器学习必备手册
- java.util.concurrent 之 队列同步器AQS
- 设计模式---抽象工厂模式
- Java 网络IO编程总结(BIO、NIO、AIO均含完整实例代码)
- 我的Laravel学习之路之表单验证 validation
- 【目标检测】RCNN算法详解
- 第一次写博客,随便聊聊写几句吧
- C#函数
- 蓝牙L2CAP剖析(二)
- 将CPP文件移植成C文件方法和注意的问题
- substring内存泄露原因及解决