抽象工厂模式(Abstract Factory)
来源:互联网 发布:小象学院算法视频 编辑:程序博客网 时间:2024/06/06 18:39
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
优点:
(1)封装创建过程。客户不用知道类厂是如何创建类实例的,类厂封闭了所有创建的细节。这样可选择不同的创建方法,增加了灵活性。
(2)将客户与具体类隔离,提高了各自的可重用性。
缺点:Factory类层次与具体类层次通常是平行的(即一一对应的)。增加一个具体类,一般也要相应地增加一个factory类,增加了系统复杂度。
优点:
(1)封装创建过程。客户不用知道类厂是如何创建类实例的,类厂封闭了所有创建的细节。这样可选择不同的创建方法,增加了灵活性。
(2)将客户与具体类隔离,提高了各自的可重用性。
缺点:Factory类层次与具体类层次通常是平行的(即一一对应的)。增加一个具体类,一般也要相应地增加一个factory类,增加了系统复杂度。
Abstract Factory类中通常是一组Factory Method的集合。Factory Method模式没有本质区别。通常可以把工厂作为单件。
#include <vcl.h>class AbstractProductA{};//抽象产品A(模拟仪表家族)class ProductA1:public AbstractProductA//具体产品A1{ public: ProductA1() { MessageBox(0,"模拟仪表,xk3190A9","产品A1",0); }};class ProductA2:public AbstractProductA//具体产品A2{ public: ProductA2() { MessageBox(0,"模拟仪表,xk3190A9+","产品A2",0); }};class AbstractProductB{};//抽象产品B(数字仪表家族)class ProductB1:public AbstractProductB //具体产品B1{ public: weProductB1() { MessageBox(0,"数字仪表,DS1","产品B1",0); }};class ProductB2:public AbstractProductB//具体产品B2{ public: weProductB2() { MessageBox(0,"数字仪表,DS3","产品B2",0); }};//-------------------------------------------------------------------------class AbstractFactory //抽象工厂{ public: virtual AbstractProductA * CtreateProductA()=0;//生产模拟仪表 virtual AbstractProductB * CtreateProductB()=0;//生产数字仪表};//具体工厂1class ConCreateFactory1:public AbstractFactory{ public: virtual AbstractProductA * CtreateProductA()//生产A9仪表 { return new ProductA1(); } virtual AbstractProductB * CtreateProductB()//生产DS3 { ProductB2 * a = new ProductB2(); a->weProductB2(); } static ConCreateFactory1 * Instance()//单件模式 { static ConCreateFactory1 factory1; return &factory1; } protected: ConCreateFactory1(){}; ConCreateFactory1(const ConCreateFactory1&); ConCreateFactory1 & operator =(const ConCreateFactory1 &);};//具体工厂2class ConCreateFactory2:public AbstractFactory{ public: virtual AbstractProductA * CtreateProductA()//生产A9+ { return new ProductA2(); } virtual AbstractProductB * CtreateProductB()//生产DS1 { ProductB1 * b= new ProductB1(); b->weProductB1(); } static ConCreateFactory2 * Instance()//单件模式 { static ConCreateFactory2 factory2; return &factory2; } protected: ConCreateFactory2(){}; ConCreateFactory2(const ConCreateFactory2&); ConCreateFactory2 & operator =(const ConCreateFactory2 &);};
.cpp中调用方法,如下:
void __fastcall TForm1::Button13Click(TObject *Sender){ ConCreateFactory1 *f = ConCreateFactory1::Instance();//A9,DS1 AbstractProductA *p = f->CtreateProductA(); f->CtreateProductB(); ConCreateFactory2 *f1= ConCreateFactory2::Instance();//A9+,DS3 f1->CtreateProductA(); f1->CtreateProductB();}
0 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 抽象工厂模式
- 空姐打电话被电死
- Memcached真的过时了吗?
- flex4 弹框拖动范围控制
- Lies, Damned Lies and Benchmarks
- android 网络图片双缓存
- 抽象工厂模式(Abstract Factory)
- iOS基础控件-UITabBarController-1 初识UITabBarController
- s3c6410中断处理
- Cassandra代替Redis?
- php数组函数
- cocos2d-x 引擎分析:程序是如何开始运行与结束的?
- python 下win32的安装文件可以在这里找
- 京东云汇代码库
- 更改Android sdcard访问权限