抽象工厂模式(笔记)
来源:互联网 发布:微信淘宝优惠群怎么做 编辑:程序博客网 时间:2024/05/21 02:36
定义:
抽象工厂模式是所有形态的工厂模式最为抽象和最为一般性的模式。抽象工厂模式可以向客户端提供一个接口,使得客户端不必在指定产品的具体类型的前提下,能够创建多个产品族的产品对象。
抽象工厂中方法对于产品结构,具体工厂对应于产品族
主要角色及UML
抽象产品:AbstractProduct
都有可能具体不同的实现
具体产品:ConcreteProduct 具体产品
对应于抽象产品的具体实现
抽象接口工厂:AbstractFactory
包含所有创建产品的抽象方法
具体接口工厂:ConcreteFactory 创建特定实现的产品对象
源代码:
// 抽象产品A角色package com.pattern.abstractfactory;public interface AbstractProductA{ public void say();}
// 抽象产品B角色package com.pattern.abstractfactory;public interface AbstractProductB{ public void say();}
// 具体产品A1角色package com.pattern.abstractfactory;public class ConcreateProductA1 implements AbstactProdctA{ public void say(){ System.out.println("具体产品A1"); }}
// 具体产品A2角色package com.pattern.abstractfactory;public class ConcreateProductA2 implements AbstactProdctA{ public void say(){ System.out.println("具体产品A2"); }}
// 具体产品B1角色package com.pattern.abstractfactory;public class ConcreateProductB1 implements AbstactProdctA{ public void say(){ System.out.println("具体产品B1"); }}
// 具体产品B2角色package com.pattern.abstractfactory;public class ConcreateProductB2 implements AbstactProdctA{ public void say(){ System.out.println("具体产品B2"); }}
// 抽象工厂角色package com.pattern.abstractfactory;public interface AbstarctFactory{ public AbstractProductA createProductA(); public AbstractProductB createProductB();}
// 具体工厂角色Apackage com.pattern.abstractfactory;public class ConcreateFactoryA implements AbstarctFactory{ pulic AbstractProductA createProductA(){ return new ConcreateProductA1(); }public AbstactProductB createProductB(){ return new ConcreateProductB1();}}
// 具体工厂角色Bpackage com.pattern.abstractfactory;public class ConcreateFactoryB implements AbstarctFactory{ pulic AbstractProductA createProductA(){ return new ConcreateProductA2(); }public AbstactProductB createProductB(){ return new ConcreateProductB2();}}
客户端测试类:
// 测试类 package com.pattern.abstractfactory;public static void main(String []args){ AbstactFactory fa = new ConcreateFactoryA(); AbstractProductA pa = fa.createProductA(); AbstractProductB pb = fa.createProductB(); AbstactFactory fb = new ConcreateFactoryB(); AbstractProductA pa1 = fb.createProductA(); AbstractProductB pb1 = fb.createProductB();pa.say();pb.say();pa1.say();pb1.say();}
结果:
具体产品A1
具体产品B1
具体产品A2
具体产品B2
抽象工厂模式的优缺点分析:
优点:客户端不再负责对象的具体创建,而是把这个责任交给了具体的工厂类,客户端只负责对对象的调用。当具有产品家族性质的产品被涉及到一个工厂类中后,对客户端而言是非常友好的,更重要的是如果想要更换为另外一产品家族,所要做的只是需要增加相应的产品家族成员和增加一个具体的产品工厂而已。
缺点:当有新的产品加入的时候,也就是当产品的结构发生改变时,修要修改抽象工厂类的设计,这就导致了必须修改所有的具体工厂类,导致很客观的工作量的增加。
0 0
- 抽象工厂模式(笔记)
- 抽象工厂模式-- 学习笔记
- 【学习笔记】抽象工厂模式
- 设计模式笔记-抽象工厂模式
- 设计模式笔记-抽象工厂模式
- 设计模式笔记-抽象工厂模式
- 设计模式笔记之---抽象工厂模式
- 《设计模式》笔记之抽象工厂模式
- 设计模式笔记--抽象工厂模式
- 设计模式学习笔记-抽象工厂模式
- 设计模式学习笔记--抽象工厂模式
- 设计模式学习笔记-抽象工厂模式
- 设计模式笔记--抽象工厂模式
- Android 设计模式 笔记 - 抽象工厂模式
- 设计模式笔记二:抽象工厂模式
- 设计模式笔记 简单工厂,抽象工厂,工厂
- 2.工厂模式(简单工厂模式,工厂方法模式,抽象工厂模式)(设计模式笔记)
- 设计模式笔记之工厂模式--抽象工厂(Abstract Factory)
- 使用windows service Host wcf服务
- 突然开始想坚持一些东西
- Oracle问题
- LeetCode 001 Two Sum
- bootstrap学习笔记
- 抽象工厂模式(笔记)
- flexbuilder3.6 log winows7
- 所谓五险一金
- 高可用性知识总结
- 推送通知
- 第3节 段机制和描述符
- 【C++】高精度加法
- iOS 播放 gif
- matlab实现卡尔曼滤波(Kalman filter)