设计模式---抽象工厂
来源:互联网 发布:php源码解密 编辑:程序博客网 时间:2024/05/16 18:40
Abstract Factory
一、功能
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
二、示例代码
namespace DesignPattern_AbstractFactory{class AbstractProductA {};// Product Aclass ProductA1 : public AbstractProductA {};class ProductA2 : public AbstractProductA {};class AbstractProductB {};// Product Bclass ProductB1 : public AbstractProductB {};class ProductB2 : public AbstractProductB {};class AbstractFactory{public:virtual AbstractProductA* CreateProductA() = 0 ;// 创建ProductAvirtual AbstractProductB* CreateProductB() = 0 ;// 创建ProductB} ;class ConcreteFactory1 : public AbstractFactory{public:virtual AbstractProductA* CreateProductA() { return new ProductA1() ; }virtual AbstractProductB* CreateProductB() { return new ProductB1() ; }static ConcreteFactory1* Instance() { static ConcreteFactory1 instance ; return &instance ; }protected:ConcreteFactory1() {}private:ConcreteFactory1(const ConcreteFactory1&) ;ConcreteFactory1& operator=(const ConcreteFactory1&) ;} ;class ConcreteFactory2 : public AbstractFactory{public:virtual AbstractProductA* CreateProductA() { return new ProductA2() ; }virtual AbstractProductB* CreateProductB() { return new ProductB2() ; }static ConcreteFactory2* Instance() { static ConcreteFactory2 instance ; return &instance ; }protected:ConcreteFactory2() {}private:ConcreteFactory2(const ConcreteFactory2&) ;ConcreteFactory2& operator=(const ConcreteFactory2&) ;} ;}客户端代码:{using namespace DesignPattern_AbstractFactory ;// 第一种创建方法AbstractFactory *pFactory = ConcreteFactory1::Instance() ;AbstractProductA *pProductA = pFactory->CreateProductA() ;AbstractProductB *pProductB = pFactory->CreateProductB() ;// 第二种创建方法pFactory = ConcreteFactory2::Instance() ;pProductA = pFactory->CreateProductA() ;pProductB = pFactory->CreateProductB() ;}
用通俗的话,解释一遍“功能:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。”用例子解说,在上面的客户端代码示例中,
我们原本要创建 ProductA1, ProductB1, ProductA2,ProductB2,四个对象,如果使用抽象工厂模式,首先,我们要提取一个抽象工厂类,就是
class AbstractFactory{public:virtual AbstractProductA* CreateProductA() = 0 ;// 创建ProductAvirtual AbstractProductB* CreateProductB() = 0 ;// 创建ProductB} ;
并在 AbstracFactory的具体子类中实现具体对象的创建过程,如:class AbstractFactory1, class AbstractFactory2.在客户代码中,我们使用统一的对象创建过程:
pProductA = pFactory->CreateProductA() ;pProductB = pFactory->CreateProductB() ;
创建对象。
客户代码不需要关心那4个具体对象的类。
优点:客户代码逻辑单一,指需要使用特定的具体子类,如,AbstractFactory1 的对象来创建其子对象。而不需要知道ProductA1,ProductB1类。
缺点:当新增一个具体对象类,如ProductC1时,要在抽象工厂类中新增抽象的创建方法,并在各个具体实现子类中增加。
- 抽象工厂设计模式
- 设计模式-----抽象工厂
- 抽象工厂设计模式
- 抽象工厂设计模式
- 抽象工厂设计模式
- 设计模式 抽象工厂
- 设计模式--抽象工厂
- 设计模式--抽象工厂
- 设计模式 抽象工厂
- 设计模式-抽象工厂
- 设计模式-> 抽象工厂
- 抽象工厂设计模式
- 设计模式--抽象工厂
- 【设计模式】抽象工厂
- 设计模式---抽象工厂
- 【设计模式-抽象工厂】
- 设计模式-抽象工厂
- 设计模式--抽象工厂
- myeclipse连接数据库
- java资源备份
- SQL server 2005 拒绝了对对象 'extended_properties' (数据库 'mssqlsystemresource',架构 'sys')的 SELECT 权限。 (Micro
- 编程面试的10大算法概念汇总
- C++中的static关键字
- 设计模式---抽象工厂
- 解构微信(四):不靠QQ,品牌和推广要推翻重来
- monkeyrunner Can't open specified script file
- hdu 3657 Game (最小割)
- JAVA细节使用20131128
- 微信深水区
- Lk范数
- XML三部曲之Schema详解
- hello,csdn