C++与设计模式(1)--工厂模式
来源:互联网 发布:云计算综述 编辑:程序博客网 时间:2024/06/05 10:12
前言
在说设计模式之前先声明很重要的一点
不要滥用设计模式
工厂模式
工厂模式主要特点是需要在工厂类中做判断,从而创造相应的产品。作为创建型模式,大致可以分为三类,简单工厂模式、工厂方法模式、抽象工厂模式。
简单工厂模式
举个例子,一家汽车公司生产两种型号的汽车:A型车和B型车,现在公司只有一个工厂来生产汽车,公司直接告诉工厂要生产哪种汽车:
enum TYPE{CARA,CARB};//汽车类class Car{public: virtual void show() = 0;};class CarA : public Car{public: void show() { cout << "This is A car"; }};class CarB : public Car{public: void show() { cout << "This is B car"; }};//工厂class Factory{public: Car* createCar(TYPE type) { switch(type) { case CARA: return new CarA; case CARB: return new CarB; default: return nullptr; } }};
这样我们可以通过工厂提供的接口来生产不同种类的汽车,但如果我们要增加新的汽车就要修改工厂类,这非常的不方便,在这种需要扩展而又不能修改的要求,工厂方法就出现了。
工厂方法
工厂方法使用继承工厂类的方法来实现可扩展性,简单来说就是把生产A车和B车的任务分在两个工厂里。
//汽车类class Car{public: virtual void show() = 0;};class CarA : public Car{public: void show() { cout << "This is A car"; }};class CarB : public Car{public: void show() { cout << "This is B car"; }};//工厂class Factory{public: virtual Car* createCar(TYPE type) = 0;};class FactoryA : Factory{public: Car* createCar() { return new CarA; }};class FactoryB : Factory{public: Car* createCar() { return new CarB; }};
这样在添加新的车型时就可以通过继承新的工厂来扩展生产。
抽象工厂模式
先简述一下抽象工厂和一般工厂的不同之处:一般工厂生产的是单一类型的产品,比如不管A型车还是B型车之前都是使用a引擎的汽车,现在公司引入了β引擎,需要增加生产b引擎的A、B汽车的工厂,现在就要使用抽象工厂:生产复杂类型的工厂。
//汽车类class aCar{public: virtual void show() = 0;};class aCarA : public aCar{public: void show() { cout << "This is A car"; }};class aCarB : public aCar{public: void show() { cout << "This is B car"; }};class bCar{public: virtual void show() = 0;};class bCarA : public bCar{public: void show() { cout << "This is A car"; }};class bCarB : public bCar{public: void show() { cout << "This is B car"; }};//工厂class Factory{public: virtual aCar* createACar(TYPE type) = 0; virtual bCar* createBCar(TYPE type) = 0;};class FactoryA : Factory{public: aCar* createACar() { return new aCarA; } bCar* createBCar() { return new bCarA; }};class FactoryB : Factory{public: aCar* createACar() { return new aCarB; } bCar* createBCar() { return new bCarB; }};
0 0
- 设计模式--(1)工厂模式与抽象工厂模式
- 设计模式 - 简单工厂模式(C++)
- 设计模式c++(一)----工厂模式
- 设计模式----工厂模式(c++)
- 【设计模式C++】工厂模式
- 设计模式之工厂设计模式(一:简单工厂模式与工厂方法模式)
- C++与设计模式(1)--工厂模式
- 设计模式之简单工厂,工厂方法模式(c++)
- Java设计模式-工厂模式(1)简单工厂模式
- JAVA设计模式(二)工厂模式与观察者模式
- 设计模式学习(1) 工厂模式
- C++设计模式(1)-工厂模式
- 设计模式之工厂模式(1)
- 设计模式(1)---工厂模式
- 设计模式(1)------工厂方法模式
- 设计模式(工厂模式1)
- 设计模式(1)--工厂模式
- 设计模式(1)--工厂方法模式
- LTE 报告值与RSRP质量换算关系!
- LTE RSRQ 报告值与 RSRQ 质量换算关系
- (收藏)嵌入式领域的职业发展方向
- LTE RSRP RSRQ RSSI SINR的定义
- 深度学习读书笔记之RBM(限制波尔兹曼机)
- C++与设计模式(1)--工厂模式
- java中quals的用法
- LTE 频段分配
- LTE接口
- 获取手机里面的所有的应用程序
- PHP二叉树(二):平衡二叉树(AVL)
- ZZ:究竟什么是LTE OFDM技术,OFDM技术详解
- java 多excel下载 打成zip压缩包 程序中创建文件 响应到浏览器(三)
- anjularjs $digest already in progress