1.简单工厂模式
来源:互联网 发布:盈建科结构设计软件 编辑:程序博客网 时间:2024/06/07 14:28
1.说明
设计模式笔记开篇,在该系列笔记中,多参考和归纳与《大话设计模式》和《设计模式可复用面向对象软件的基础》,如果有侵权的嫌疑请以邮件通知我(zhang_int@sina.cn)以便及时撤下该系列文章。
该系列文章将遵循以下风格,模式说明,应用举例(选择),代码UML图,代码。文中代码在linux g++方式均编译通过并可执行。代码采用多文件方式,一个类为一个文件,如有读者未执行通过,请在评论区留言,以便及时修正。
如有未拖之处,欢迎各位读者指正,互相学习。
在阅读的时候,请理解UML结构,代码都是次要的。
2.简单工厂模式说明
本质:创建符合要求的对象。
在工厂模式中,通常由工厂类,产品基类接口类,产品类[产品类应该是对等平行的关系,不存在包含,组合的关系逻辑]。一个工厂可以生成多个产品,在客户端通过产品基类提供的公共接口来屏蔽产品的之间的差异。产品之间可以方便快速切换。
有时可能会根据需求类别,在工厂类中用switch进行判别,客户端只需要提出需求的类型即OK。
3.UML图
4.代码
#ifndef __CBASEPRODUCE_H#define __CBASEPRODUCE_Hclass CBaseProduct{public: void setval(int first, int second) { m_valA = first; m_valB = second; } virtual int handle() = 0;public: int m_valB; int m_valA;};#endif#ifndef __CADDPRODUCT_H#define __CADDPRODUCT_H#include "CBaseProduct.h"class CAddProduct:public CBaseProduct{public: int handle() { return m_valA + m_valB; }};#endif#ifndef __CMAXPRODUCT_H#define __CMAXPRODUCT_H#include "CBaseProduct.h"class CMaxProduct:public CBaseProduct{public: int handle() { int ret; if (m_valA>m_valB) ret = m_valA; else ret = m_valB; return ret; }};#endif#ifndef __CMINPRODUCT_H#define __CMINPRODUCT_H#include "CBaseProduct.h"class CMinProduct:public CBaseProduct{public: int handle() { int ret; if (m_valA < m_valB) ret = m_valA; else ret = m_valB; return ret; }};#endif#ifndef __COPERTFACTORY_H#define __COPERTFACTORY_H#include <iostream>#include "CBaseProduct.h"#include "CMaxProduct.h"#include "CMinProduct.h"#include "CAddProduct.h"enum EOPERTYPE{OPERADD, OPERMAX, OPERMIN};class COpertFactory{public: CBaseProduct* create_product(EOPERTYPE type) { CBaseProduct* oper = NULL; switch (type) { case OPERADD: oper = new CAddProduct; break; case OPERMAX: oper = new CMaxProduct; break; case OPERMIN: oper = new CMinProduct; break; } return oper; }};#endif#include <iostream>#include "COperFactory.h"#include "CBaseProduct.h"int main(void){ COpertFactory* fact = new COpertFactory; CBaseProduct* oper = fact->create_product(OPERADD); oper->setval(10, 20); std::cout<<"oper handle:"<<oper->handle()<<std::endl; CBaseProduct* opermin = fact->create_product(OPERMIN); opermin->setval(3, 5); std::cout<<"oper min:"<<opermin->handle()<<std::endl; CBaseProduct* opermax = fact->create_product(OPERMAX); opermax->setval(100, 1000); std::cout<<"oper max:"<<opermax->handle()<<std::endl; delete oper; delete opermin; delete opermax; delete face; return 0;}
。
0 0
- 1.简单工厂模式
- 1.简单工厂模式
- 1.简单工厂模式
- 1.简单工厂模式
- 1.简单工厂模式
- 1.简单工厂模式
- 工厂模式-简单工厂
- 工厂模式-简单工厂
- 1. 简单工厂设计模式
- 工厂模式-简单工厂模式
- 工厂模式-简单工厂模式
- 简单工厂模式,工厂模式
- 工厂模式-简单工厂模式
- 简单工厂模式,工厂模式
- 大话设计模式-1.简单工厂模式
- 1.设计模式_简单工厂模式
- 设计模式-1.简单工厂模式
- 1.设计模式之简单工厂模式
- 位操作之求绝对值
- 聊天工具服务器
- python学习系列(六)--- 正则表达式搜索中文
- Maven实战
- 3D家居设计展示系统
- 1.简单工厂模式
- hdu 2087 剪花布条 strstr使用 或者 KMP
- iOS多线程之NSOperation和GCD的比较
- 深入浅出Swing事件分发线程
- 异常的工作原理
- 官方转载=》python2到3的库的变动
- j2e中操作EXCEL
- 各种字符集(整理学习)
- SSD7 ex6