大话设计模式--工厂模式 factory -- C++实现实例
来源:互联网 发布:windows xp 雨木林风 编辑:程序博客网 时间:2024/04/30 00:15
实现《大话设计模式》的C++版本。。。
1. 工厂模式 使用的范围是 同一个基类,下面很多子类。
(1)这里很容易出现的一个问题n多的子类继承自抽象基类,我们不得不在每次要用到子类的地方就编写诸如new ×××;的代码。这里带来两个问题1)客户程序员必须知道实际子类的名称(当系统复杂后,命名将是一个很不好处理的问题,为了处理可能的名字冲突,有的命名可能并不是具有很好的可读性和可记忆性,就姑且不论不同程序员千奇百怪的个人偏好了。),2)程序的扩展性和维护变得越来越困难。
(2)还有一种情况就是在父类中并不知道具体要实例化哪一个具体的子类。这里的意思为:假设我们在类A中要使用到类B,B是一个抽象父类,在A中并不知道具体要实例化那一个B的子类,但是在类A的子类D中是可以知道的。在A中我们没有办法直接使用类似于new ×××的语句,因为根本就不知道×××是什么。
注意: 如下的结构图, 假设还要添加一个算法, 则需要多实现一个算法类, 并且修改简单工厂类的case,这违反 “开放--封闭”原则, 对扩展开放,对修改封闭。。。
这是工厂模式的缺点,后文有工厂方法模式的比较。。
下面为(1)的示例:一个关于计算器的设计, 设计有 “+ - * /”等运算,基类 operation , 下面有“+ - * /”的实现子类。
operation.h
#ifndef OPERATION_H#define OPERATION_Hclass operation{public: operation(); double virtual getResult(); double strA; double strB; double result;};#endif // OPERATION_H
operation.cpp
#include "operation.h"operation::operation(){ strA = 0; strB = 0; result = 0;}double operation::getResult(){ return result;}
operationFunc.h
#ifndef OPERATIONFUNC_H#define OPERATIONFUNC_H#include "operation.h"class OperationAdd : public operation{public: double getResult();};class OperationSub : public operation{public: double getResult();};class OperationMul : public operation{public: double getResult();};class OperationDiv : public operation{public: double getResult();};#endif // OPERATIONFUNC_H
operationFunc.cpp
#include "operationFunc.h"double OperationAdd::getResult(){ result = strA + strB; return result;}double OperationSub::getResult(){ result = strA - strB; return result;}double OperationMul::getResult(){ result = strA * strB; return result;}double OperationDiv::getResult(){ result = strA / strB; return result;}
operationfactory.h
#ifndef OPERATIONFACTORY_H#define OPERATIONFACTORY_H#include <string>#include "operation.h"#include "operationFunc.h"using namespace std;class OperationFactory{public: OperationFactory(); operation* createOperation(string operStr);};#endif // OPERATIONFACTORY_H
operationfactory.cpp
#include "operationfactory.h"OperationFactory::OperationFactory(){}operation* OperationFactory::createOperation(string operStr){ operation *oper = NULL; if( operStr == "+" ) oper = new OperationAdd(); else if( operStr == "-" ) oper = new OperationSub(); else if( operStr == "*" ) oper = new OperationMul(); else if( operStr == "/" ) oper = new OperationDiv(); return oper;}
main.cpp
#include <iostream>#include <string>#include "operationfactory.h"using namespace std;int main(){ cout << "Simple Factory test" << endl; operation *oper = NULL; OperationFactory factory; oper = factory.createOperation("/"); oper->strA = 1.1; oper->strB = 2.2; double result = oper->getResult(); cout << "result: " << result << endl; return 0;}
- 大话设计模式--工厂模式 factory -- C++实现实例
- 大话设计模式--抽象工厂模式 Abstract Factory -- C++实现实例
- 大话设计模式--工厂方法模式 Factory Method -- C++实现
- 大话设计模式一:简单工厂模式(simple factory)
- 大话设计模式八:工厂方法模式(factory method)
- 大话设计模式十五:抽象工厂模式(abstract factory)
- 大话设计模式c++实现1——简单工厂模式 Simple Factory Pattern
- C++实现设计模式: Factory 工厂模式
- C++实现设计模式: Factory 工厂模式
- C++实现设计模式: Factory 工厂模式
- 工厂设计模式 factory
- 简单工厂实现-大话设计模式
- 简单工厂实现-大话设计模式
- 大话设计模式-工厂模式
- 大话设计模式:工厂模式
- 大话设计模式----工厂模式
- boost::factory实现对象工厂设计模式
- [设计模式]Factory工厂模式
- mongodb学习(一)
- 求一个字符串中连续出现的次数最多的子串[C语言实现]
- 减少 Linux 电耗,第 1 部分: CPUfreq 子系统
- 【论文笔记】Unsupervised Discovery of Mid-Level Discriminative Patches
- 登录信息保存到cookie(js)
- 大话设计模式--工厂模式 factory -- C++实现实例
- [Editing] TP-LINK740N v5 firmware Crack
- iOS多线程编程指南(四)线程同步
- jQuery easy ui中datagrid的使用
- sizeof 的用法
- mysql-proxy 读写分离脚本 ytjwt
- 页面加载时判断是否登陆(js)
- Eclipse 高亮显示选中的相同变量
- 两个队列模拟栈的操作(stl实现)