Abstract Factory 抽象工厂模式
来源:互联网 发布:office 2016 mac 卡 编辑:程序博客网 时间:2024/05/16 05:50
根据UML图简单代码进行演示过程如下:
Product.h
#ifndef _PRODUCT_H_ #define _PRODUCT_H_ class AbstractProductA { public: virtual ~AbstractProductA(); protected: AbstractProductA(); private: }; class AbstractProductB { public: virtual ~AbstractProductB(); protected: AbstractProductB(); private: }; class ProductA1:public AbstractProductA { public: ProductA1(); ~ProductA1(); protected: private:}; class ProductA2:public AbstractProductA { public: ProductA2(); ~ProductA2(); protected: private:}; class ProductB1:public AbstractProductB { public: ProductB1(); ~ProductB1(); protected: private: }; class ProductB2:public AbstractProductB { public: ProductB2(); ~ProductB2(); protected: private:}; #endif
AbstractFactory.h
#ifndef _ABSTRACTFACTORY_H_ #define _ABSTRACTFACTORY_H_ class AbstractProductA; class AbstractProductB; class AbstractFactory { public: virtual ~AbstractFactory(); virtual AbstractProductA* CreateProductA()= 0;virtual AbstractProductB* CreateProductB()= 0;protected: AbstractFactory(); private: }; class ConcreteFactory1:public AbstractFactory{ public: ConcreteFactory1(); ~ConcreteFactory1(); AbstractProductA* CreateProductA(); AbstractProductB* CreateProductB(); protected: private: }; class ConcreteFactory2:public AbstractFactory{ public: ConcreteFactory2(); ~ConcreteFactory2(); AbstractProductA* CreateProductA(); AbstractProductB* CreateProductB(); protected: private: }; #endif
两个cpp实现文件
#include"AbstractFactory.h" #include"Product.h" #include<iostream> using namespace std; AbstractFactory::AbstractFactory() { } AbstractFactory::~AbstractFactory() { } ConcreteFactory1::ConcreteFactory1() { } ConcreteFactory1::~ConcreteFactory1() { } AbstractProductA* ConcreteFactory1::CreateProductA() { return new ProductA1(); } AbstractProductB* ConcreteFactory1::CreateProductB() { return new ProductB1(); } ConcreteFactory2::ConcreteFactory2() { } ConcreteFactory2::~ConcreteFactory2() { } AbstractProductA* ConcreteFactory2::CreateProductA() { return new ProductA2(); } AbstractProductB* ConcreteFactory2::CreateProductB() { return new ProductB2(); }
#include"Product.h" #include<iostream> using namespace std; AbstractProductA::AbstractProductA() {} AbstractProductA::~AbstractProductA() {} AbstractProductB::AbstractProductB() { } AbstractProductB::~AbstractProductB() { } ProductA1::ProductA1() { cout<<"ProductA1..."<<endl; } ProductA1::~ProductA1() { } ProductA2::ProductA2() { cout<<"ProductA2..."<<endl; } ProductA2::~ProductA2() { } ProductB1::ProductB1() { cout<<"ProductB1..."<<endl; } ProductB1::~ProductB1() { } ProductB2::ProductB2() { cout<<"ProductB2..."<<endl; } ProductB2::~ProductB2() { }
主函数测试文件
#include"AbstractFactory.h" #include<iostream> using namespace std; int main(int argc,char*argv[]){ AbstractFactory* cf1 = new ConcreteFactory1(); cf1->CreateProductA(); cf1->CreateProductB(); AbstractFactory* cf2 = new ConcreteFactory2(); cf2->CreateProductA(); cf2->CreateProductB(); return 0;}
AbstractFactory模式的实现代码很简单,在测试程序中可以看到,当我们要创建一组对
象(ProductA1,ProductA2)的时候我们只用维护一个创建对象(ConcreteFactory1),大大
简化了维护的成本和工作。
AbstractFactory模式和Factory模式的区别是初学(使用)设计模式时候的一个容易引
起困惑的地方。实际上,AbstractFactory模式是为创建一组(有多类)相关或依赖的对象提
供创建接口,而Factory模式是为一类对象提供创建接口或延迟对象的创建到子类中实现。并且可以看到,AbstractFactory模式通常都是使用Factory模式实现(ConcreteFactory1)。
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 抽象工厂模式
- 苹果OS X全新界面及iOS 8或将在WWDC上揭晓
- ios 移动应用通用逻辑流程
- Python:AttributeError: 'function' object has no attribute '_doc_'
- B. Prison Transfer
- ASP.NET 实现重写重写 Url Rewriting详解
- Abstract Factory 抽象工厂模式
- wpf 无边框窗体无法响应MouseMove事件
- 微软CEO纳德拉若弃Xbox,比尔盖茨也同意
- 滚动地图的实现
- 如何编写nand驱动,360doc比较详细
- 更宽更薄?iPhone6的4大猜想
- 如何有效的布局棋牌网站内部链接
- hdu 3652 B-number (数位dp+记忆化)
- 只是一名司级官员参加(在中国官僚体系中