设计模式系列--抽象工厂模式
来源:互联网 发布:mac鼠标右键设置 编辑:程序博客网 时间:2024/06/15 17:46
如图,FactoryA专心负责生产ProductA,FactoryB专心负责生产ProductB,FactoryA和FactoryB之间没有关系;如果到了后期,如果需要生产ProductC时,我们则可以创建一个FactoryC工厂类,该类专心负责生产ProductC类产品。由于FactoryA、FactoryB和FactoryC之间没有关系,当加入FactoryC加入时,对FactoryA和FactoryB的工作没有产生任何影响,那么对代码进行测试时,只需要单独对FactoryC和ProductC进行单元测试,而FactoryA和FactoryB则不用进行测试,则可省去大量无趣无味的测试工作。
适用场合
工厂方法模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。
- 在设计的初期,就考虑到产品在后期会进行扩展的情况下,可以使用工厂方法模式;
- 产品结构较复杂的情况下,可以使用工厂方法模式;
由于使用设计模式是在详细设计时,就需要进行定夺的,所以,需要权衡多方面的因素,而不能为了使用设计模式而使用设计模式
#include <iostream>using namespace std;class Product{public:virtual void Show() = 0;};class ProductA : public Product{public:void Show(){cout<< "I'm ProductA"<<endl;}};class ProductB : public Product{public:void Show(){cout<< "I'm ProductB"<<endl;}};class Factory{public:virtual Product *CreateProduct() = 0;};class FactoryA : public Factory{public:Product *CreateProduct(){return new ProductA ();}};class FactoryB : public Factory{public:Product *CreateProduct(){return new ProductB ();}};int main(int argc , char *argv []){Factory *factoryA = new FactoryA ();Product *productA = factoryA->CreateProduct();productA->Show();Factory *factoryB = new FactoryB ();Product *productB = factoryB->CreateProduct();productB->Show();if (factoryA != NULL){delete factoryA;factoryA = NULL;}if (productA != NULL){delete productA;productA = NULL;}if (factoryB != NULL){delete factoryB;factoryB = NULL;}if (productB != NULL){delete productB;productB = NULL;}return 0;}
0 0
- 【设计模式系列】--抽象工厂
- 设计模式系列4-抽象工厂模式
- JAVA系列-设计模式-抽象工厂模式
- 炒冷饭系列:设计模式 抽象工厂模式
- 设计模式系列--抽象工厂模式
- 设计模式系列:抽象工厂模式
- 设计模式系列之抽象工厂模式
- 设计模式系列--抽象工厂模式
- 实战设计模式系列-AbstractFactory(抽象工厂)
- 设计模式系列之 抽象工厂
- 设计模式之工厂模式系列(简单工厂,工厂模式,抽象工厂模式)
- 设计模式实现系列-简单工厂模式-工厂模式-抽象工厂模式
- 设计模式系列(七)简单工厂模式、工厂方法模式和抽象工厂模式对比
- 设计模式系列--工厂模式(简单工厂模式、抽象工厂模式)
- 抽象工厂设计模式
- 设计模式-----抽象工厂
- 抽象工厂设计模式
- 抽象工厂设计模式
- 这种处理文章的机制真脑残
- 在cmd下运行java程序报的错误截图(仔细观察就能解决问题)
- 病毒侵袭持续中
- 函数重入
- 老田让我们写博客
- 设计模式系列--抽象工厂模式
- 功能测试理解
- Objective-C 【autorelease基本使用】
- linux 下安装pyhton
- post 请求 与上传
- DDR3详解(以Micron MT41J128M8 1Gb DDR3 SDRAM为例)
- 2015年夏--致1434010105班
- ZOJ2358解题报告
- Oracle学习笔记20150901脏读不可重复读以及幻读概念理解