抽象工厂模式
2017-10-13 14:00
106 查看
例子:一个显示器电路板厂商,旗下的显示器电路板种类有非液晶的和液晶的;这个时候,厂商建造两个工厂,工厂A负责生产非液晶显示器电路板,工厂B负责生产液晶显示器电路板;工厂一直就这样运行着。有一天,总经理发现,直接生产显示器的其余部分也挺挣钱,所以,总经理决定,再建立两个工厂C和D;C负责生产非液晶显示器的其余部件,D负责生产液晶显示器的其余部件。此时,旁边参谋的人就说了,经理,这样做不好,我们可以直接在工厂A中添加一条负责生产非液晶显示器的其余部件的生产线,在工厂B中添加一条生产液晶显示器的其余部件的生产线,这样就可以不用增加厂房,只用将现有厂房进行扩大一下,同时也方便工厂的管理,而且生产非液晶显示器电路板的技术人员对非液晶显示的其余部件的生产具有指导的作用,生产液晶显示器电路板也是同理。总经理发现这是一个不错的主意。
回到软件开发的过程中来,工厂A和B就是C++设计模式——工厂方法模式;总经理再次建立工厂C和D,就是重复C++设计模式——工厂方法模式,只是生产的产品不同罢了。这样做的弊端就如参谋所说的那样,增加了管理成本和人力成本。在面向对象开发的过程中,是很注重对象管理和维护的,对象越多,就越难进行管理和维护;如果工厂数量过多,那么管理和维护的成本将大大增加;虽然生产的是不同的产品,但是可以二者之间是有微妙的关系的,如参谋所说,技术人员的一些技术经验是可以借鉴的,这就相当于同一个类中的不同对象,之间是可以公用某些资源的。那么,增加一条流水线,扩大厂房,当然是最好的主意了。
AbstractFactory的作用:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类
回到软件开发的过程中来,工厂A和B就是C++设计模式——工厂方法模式;总经理再次建立工厂C和D,就是重复C++设计模式——工厂方法模式,只是生产的产品不同罢了。这样做的弊端就如参谋所说的那样,增加了管理成本和人力成本。在面向对象开发的过程中,是很注重对象管理和维护的,对象越多,就越难进行管理和维护;如果工厂数量过多,那么管理和维护的成本将大大增加;虽然生产的是不同的产品,但是可以二者之间是有微妙的关系的,如参谋所说,技术人员的一些技术经验是可以借鉴的,这就相当于同一个类中的不同对象,之间是可以公用某些资源的。那么,增加一条流水线,扩大厂房,当然是最好的主意了。
AbstractFactory的作用:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类
代码:
//
// Created by siwen on 2017/10/13. // #include <iostream> using namespace std; //ProductA class ProductA{ public: virtual void show() = 0 ; }; class ProductA1 : public ProductA{ public: void show(){ cout<<"I'm productA1" <<endl; } }; class ProductA2 : public ProductA{ public: void show(){ cout<<"I'm productA2"<<endl; } }; //ProductB class ProductB{ public: virtual void show() = 0 ; }; class ProductB1 : public ProductB{ public: void show(){ cout<<"I'm productB1" <<endl; } }; class ProductB2 : public ProductB{ public: void show(){ cout<<"I'm productB2"<<endl; } }; //Factory class Factory{ public: virtual ProductA* createProductA() = 0; virtual ProductB* createProductB() = 0; }; class Factory1 : public Factory{ public: ProductA* createProductA() { return new ProductA1(); } ProductB* createProductB(){ return new ProductB1(); } }; class Factory2 : public Factory{ public: ProductA* createProductA() { return new ProductA2(); } ProductB* createProductB(){ return new ProductB2(); } }; int main(int argc, char *argv[]){ Factory *FactoryObj1 = new Factory1(); Factory *FactoryObj2 = new Factory2(); ProductA *ProductAObj1 = FactoryObj1->createProductA(); ProductA *ProductAObj2 = FactoryObj2->createProductA(); ProductB *ProductBObj1 = FactoryObj1->createProductB(); ProductB *ProductBObj2 = FactoryObj2->createProductB(); ProductAObj1->show(); ProductAObj2->show(); ProductBObj1->show(); ProductBObj2->show(); }
相关文章推荐
- 设计模式学习笔记--抽象工厂模式
- 设计模式——抽象工厂模式
- 简单工厂模式、工厂方法模式、抽象工厂模式 之间的对比
- 我对抽象工厂模式的理解
- 设计模式(2)-创建型-简单工厂,工厂,抽象工厂模式(Factory)
- 设计模式学习笔记(六):抽象工厂模式
- 设计模式之禅-抽象工厂模式
- 抽象工厂模式
- [设计模式]抽象工厂模式
- Python设计模式(一)【抽象工厂模式】
- 设计模式学习笔记--抽象工厂模式(Abstract Factory Pattern)【创建型模式】
- 【设计模式】抽象工厂模式
- java设计模式(三)--抽象工厂模式
- java设计模式学习笔记--抽象工厂模式
- 抽象工厂模式
- 抽象工厂模式-Abstract Factory Pattern 工厂三兄弟之抽象工厂模式(三):抽象工厂模式概述
- 抽象工厂模式
- 《大设》第十八篇之抽象工厂模式
- 简单工厂模式、工厂模式和抽象工厂模式例子
- 二十四种设计模式:抽象工厂模式(Abstract Factory Pattern)