博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式之工厂模式(Factory)
阅读量:5034 次
发布时间:2019-06-12

本文共 2580 字,大约阅读时间需要 8 分钟。

设计模式的工厂模式一共有三种:简单工厂模式,工厂模式,抽象工厂模式

简单工厂模式原理:只有一个工厂类,通过传参的形式确定所创建的产品对象种类

代码如下:

#include 
#include
#include
using namespace std;#define COREA 0#define COREB 1class Core{public: virtual void show(){}};class CoreA:public Core{public: virtual void show() { cout << "This is corea" <
create(0); pcore->show(); return 0;}

工厂方法模式原理:通过在客户调用不同的工厂类来实现同一类对象的创建。

produce.h代码

#ifndef PRODUCE_H#define PRODUCE_H#include 
using namespace std;class Core{public: virtual void show(){}};class CoreA:public Core{public: virtual void show() { cout << "This is corea" <

 factory.h代码

#ifndef FACOTRY_H#define FACOTRY_H#include 
#include "produce.h"using namespace std;class Factory{public: virtual Core* create(); };class FactoryCoreA:public Factory{ virtual Core* create();};class FactoryCoreB:public Factory{ virtual Core* create();};#endif

 factory.cpp代码

#include 
#include "factory.h"using namespace std;Core* Factory::create(){ return NULL;}Core* FactoryCoreA::create(){ return new CoreA();}Core* FactoryCoreB::create(){ return new CoreB();}

 客户main.cpp代码

#include 
#include
#include
#include "factory.h"#include "produce.h"using namespace std;#define COREA 0#define COREB 1int main(){ Factory * fa = new FactoryCoreA(); Core* pcore = fa->create(); pcore->show(); return 0;}

 抽象工厂原理:抽象工厂可以创建一系列的产品,缺点如果是增加产品种类,需要重新修改抽象工厂接口和实现

部分代码如下

factory.cpp

#include 
#include "factory.h"#include "Board.h"using namespace std;Core* Factory::createcore(){ return NULL;}Core* FactorySeriaA::createcore(){ return new CoreA();}Core* FactorySeriaB::createcore(){ return new CoreB();}Board* Factory::createboard(){ return NULL;}Board* FactorySeriaA::createboard(){ return new BoardA();}Board* FactorySeriaB::createboard(){ return new BoardB();}

 fatory.h

#ifndef FACOTRY_H#define FACOTRY_H#include 
#include "produce.h"#include "Board.h"using namespace std;class Factory{public: virtual Core* createcore(); virtual Board* createboard(); };class FactorySeriaA:public Factory{ virtual Core* createcore(); virtual Board* createboard();};class FactorySeriaB:public Factory{ virtual Core* createcore(); virtual Board* createboard();};#endif

 新增的产品种类类Board.h

#ifndef BOARD_H#define BOARD_H#include 
using namespace std;class Board{public: virtual void show(){}};class BoardA:public Board{public: virtual void show() { cout << "This is boarda" <

 

转载于:https://www.cnblogs.com/liuweilinlin/p/3203165.html

你可能感兴趣的文章
百度编辑器图片在线流量返回url改动
查看>>
我对你的期望有点过了
查看>>
微信小程序wx:key以及wx:key=" *this"详解:
查看>>
下拉框比较符
查看>>
2.2.5 因子的使用
查看>>
css选择器
查看>>
photoplus
查看>>
Python 拓展之推导式
查看>>
[Leetcode] DP-- 474. Ones and Zeroes
查看>>
80X86寄存器详解<转载>
查看>>
c# aop讲解
查看>>
iterable与iterator
查看>>
返回顶部(动画)
查看>>
webpack+react+antd 单页面应用实例
查看>>
Confluence 6 SQL Server 数据库驱动修改
查看>>
Confluence 6 通过 SSL 或 HTTPS 运行 - 备注和问题解决
查看>>
【47.76%】【Round #380B】Spotlights
查看>>
Git(使用码云)
查看>>
分享Java web 开发必游之路
查看>>
IIS初始化(预加载),解决第一次访问慢,程序池被回收问题(转载)
查看>>