天津做网站的费用,dw一级网页制作教程,工程建设室内涂料招投标网站,wordpress增加付费阅读一、功能 提供一个创建一系列相关或相互依赖对象的接口#xff0c;而无需指定它们具体的类。 二、结构图类厂最基本的结构示意图如下#xff1a; 在实际应用中#xff0c;类厂模式可以扩充到很复杂的情况#xff0c;如下图所示#xff1a; 三、优缺点 优点#xff1…一、功能 提供一个创建一系列相关或相互依赖对象的接口而无需指定它们具体的类。 二、结构图 类厂最基本的结构示意图如下 在实际应用中类厂模式可以扩充到很复杂的情况如下图所示 三、优缺点 优点(1)封装创建过程。客户不用知道类厂是如何创建类实例的类厂封闭了所有创建的细节。这样可选择不同的创建方法增加了灵活性。 (2)将客户与具体类隔离提高了各自的可重用性。 缺点Factory类层次与具体类层次通常是平行的(即一一对应的)。增加一个具体类一般也要相应地增加一个factory类增加了系统复杂度。 四、实现 (1)Abstract Factory类中通常是一组Factory Method的集合。个人认为与Factory Method模式没有本质区别。 (2)通常可以把工厂作为单件。 五、示例代码 namespace DesignPattern_AbstractFactory{class AbstractProductA { }; // Product A class ProductA1 : public AbstractProductA { };class ProductA2 : public AbstractProductA { };class AbstractProductB { }; // Product B class ProductB1 : public AbstractProductB { };class ProductB2 : public AbstractProductB { };class AbstractFactory {public:virtual AbstractProductA* CreateProductA() 0 ;// 创建ProductA virtual 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() ;} 六、实例 最早知道类厂的概念是在COM中但当时也没想到这是如此重要的一种模式在许多其他模式中都可以用到类厂模式。 COM中不能直接创建组件这也是由COM的一个特性决定的即客户不知道要创建的组件的类名。转载于:https://www.cnblogs.com/chain2012/archive/2011/01/09/1931363.html