简单工厂模式
来源:互联网 发布:马尔文粒径分析软件 编辑:程序博客网 时间:2024/05/16 00:56
软件设计的简单思想:业务逻辑 和 界面逻辑 分开
当我们需要写一个可重用的类:比如本例子,可用于windons 、web 等各种C++编写的平台。就需要仔细考虑如何把 类 模块化
利用该例子来简单阐明下简单工厂模式:
1、首先定义一个事物集合(事物也可为过程)。(该类有虚方法)
2、对在这个事物集合里的每个事物定义相关的类(该类继承事物继承类,且复写 virtual方法)
3、利用一个“工厂类” 把1、2联系起来。(利用多态:定义一个父类指针,根据要求即可生成相关的子类。返回一个基类指针)
#include "stdafx.h"#include<iostream>#include<string>using namespace std;class Operation//一个操作基类,在之后的过程中,主要用来作为指针,并指向它的派生类。{private: double numberA,numberB;public: void setA(double a){numberA = a;} void setB(double b){numberB = b;} double getA(){return numberA;} double getB(){return numberB;} virtual double GetResult(){return 0;}};//给每个操作定义相关的类class OperationAdd:public Operation{public: double GetResult(){return getA()+getB();}};class OperationSub:public Operation{public: double GetResult(){return getA()-getB();}};class OperationMul:public Operation{public: double GetResult(){return getA()*getB();}};class OperationDiv:public Operation{public: double GetResult(){return getA()/getB();}};//利用一个单独的类来创造实例:工厂//声明一个Operation父类指针,以一个字符串作为参数,动态生成各种操作,并用父类指针指向它们。class OperationFactory{public: static Operation* creatOper(const char* operate) { Operation* oper =NULL; switch (*operate) { case '+': oper=new OperationAdd(); break; case '-': oper = new OperationSub(); break; case '*': oper = new OperationMul(); break; case '/': oper = new OperationDiv(); break; } return oper; }};int _tmain(int argc, _TCHAR* argv[]){ //新建一个‘操作’ Operation *oper; //用‘操作’工厂初始化一个操作 ‘ ’里面的内容可替换,如可换成水果 oper = OperationFactory::creatOper("-"); //使用操作 oper->setA(10); oper->setB(20); cout<<oper->GetResult(); delete oper; return 0;}
0 0
- 工厂模式-简单工厂
- 工厂模式-简单工厂
- 工厂模式-简单工厂模式
- 工厂模式-简单工厂模式
- 简单工厂模式,工厂模式
- 工厂模式-简单工厂模式
- 简单工厂模式,工厂模式
- 简单工厂、工厂模式、抽象工厂模式
- 简单工厂、工厂模式、抽象工厂模式
- 简单工厂&工厂模式&抽象工厂模式
- 简单工厂和工厂模式
- 简单工厂和工厂模式
- 1,工厂模式--简单工厂
- 简单工厂和工厂模式
- 简单工厂,工厂模式,抽象工厂
- 简单工厂,工厂模式,抽象工厂
- 简单工厂、工厂方法、抽象工厂模式
- 简单工厂、工厂模式和抽象工厂
- 关键词密度多少比较好?
- 解决mysql"Access denied for user'root'@'IP地址'"问题
- poj 1250 Tanning Salon 【模拟题】
- 用canvas 绘制一个灰太狼
- modelsim mos管 仿真
- 简单工厂模式
- Linux内核中实现IPV4整数转换成字符串
- 检测是否开启推送通知功能
- HDOJ 2602 Bone Collector(背包问题)
- poj--3905--Perfect Election(2-sat)
- 教程: Play Framework 2 with Scala, Anorm, JSON, CoffeeScript, jQuery & Heroku
- 《Linux命令、编辑器与Shell编程》读书笔记4.2-格式化文本工具(awk)
- C++ Primer 学习笔记_33_STL实践与分析(7) --容器适配器
- 关于Ubuntu10.04在开发驱动模块及其他模块时printk无法打印到图形界面终端的问题