设计模式C++版_1_简单工厂模式
2013-06-17 19:02
531 查看
本文是学习设计模式的学习笔记,文中引用了如下作者(书籍、博客)的内容,实例程序在《设计模式C++版》的基础上有所改动,特此声明。
Peixing Yang的《大话设计模式C++源代码》
程杰的《大话设计模式》
K_Eckel的《设计模式C++版》 http://k-eckel.cnblogs.com/
EoF的<设计模式_可复用面向对象软件的基础>
cbf4life的《24种设计模式介绍与6大设计原则》 http://cbf4life.iteye.com/
1. 应用场景
1.1 当有若干功能相似的类,各类之间并没有耦合,可以用简单工厂来实现这些类的实例化。当添加新的类的时候,不影响现有的代码。
1.2 父类并不知道具体要实例化哪一个具体的子类。
2. 功能
2.1 定义创建对象的接口,封装了对象的创建。
2.2 使得具体化类的工作延迟到了子类中。
3. 核心思想
用一个工厂来根据输入的条件来产生不同的类的对象,然后根据不同类的virtual函数得到不同的结果。
4. 优点
适用于不同情况创建不同类的对象时。
5. 缺点
客户端必须要知道基类和工厂类,耦合性差
6. 实例
设计一个计算器,要求可以进行简单的加减乘除运算。
6.1 设计类图
6.2 程序示例
6.2.1 OperationBase.h (各种运算类)
6.2.2 CalculatorFactory.h (计算器工厂类)
6.2.3 CalculatorFactory.cpp(计算器工厂类实现)
6.2.4 main
6.3 简单工厂UML类图
Peixing Yang的《大话设计模式C++源代码》
程杰的《大话设计模式》
K_Eckel的《设计模式C++版》 http://k-eckel.cnblogs.com/
EoF的<设计模式_可复用面向对象软件的基础>
cbf4life的《24种设计模式介绍与6大设计原则》 http://cbf4life.iteye.com/
1. 应用场景
1.1 当有若干功能相似的类,各类之间并没有耦合,可以用简单工厂来实现这些类的实例化。当添加新的类的时候,不影响现有的代码。
1.2 父类并不知道具体要实例化哪一个具体的子类。
2. 功能
2.1 定义创建对象的接口,封装了对象的创建。
2.2 使得具体化类的工作延迟到了子类中。
3. 核心思想
用一个工厂来根据输入的条件来产生不同的类的对象,然后根据不同类的virtual函数得到不同的结果。
4. 优点
适用于不同情况创建不同类的对象时。
5. 缺点
客户端必须要知道基类和工厂类,耦合性差
6. 实例
设计一个计算器,要求可以进行简单的加减乘除运算。
6.1 设计类图
6.2 程序示例
6.2.1 OperationBase.h (各种运算类)
// class section namespace Operation { class COperationBase { public: COperationBase(void) { m_first_num = 0.0; m_second_num = 0.0; } ~COperationBase(void) { } inline void SetFirstNum(const double a_first_num) { this->m_first_num = a_first_num; } inline void SetSecondNum(const double a_second_num) { this->m_second_num = a_second_num; } inline double GetFirstNum() { return this->m_first_num; } inline double GetSecondNum() { return this->m_second_num; } inline virtual const double GetResult() = 0; private: double m_first_num; double m_second_num; }; class CAddOperation : public COperationBase { public: inline virtual const double GetResult() { DEBUG("CAddOperation"); return GetFirstNum() + GetSecondNum(); } }; class CSubOperation : public COperationBase { public: inline virtual const double GetResult() { DEBUG("CSubOperation"); return GetFirstNum() - GetSecondNum(); } }; class CMulOperation : public COperationBase { public: inline virtual const double GetResult() { DEBUG("CMulOperation"); return GetFirstNum() * GetSecondNum(); } }; class CDivOperation : public COperationBase { public: inline virtual const double GetResult() { DEBUG("CDivOperation"); if (0 == GetSecondNum()) { DEBUG("Second num is 0."); return -1; } return GetFirstNum() / GetSecondNum(); } }; }
6.2.2 CalculatorFactory.h (计算器工厂类)
#include "OperationBase.h" namespace Factory { class CCalculatorFactory { public: CCalculatorFactory(void); ~CCalculatorFactory(void); static Operation::COperationBase *Create(char a_operator); }; }
6.2.3 CalculatorFactory.cpp(计算器工厂类实现)
#include "CalculatorFactory.h" Factory::CCalculatorFactory::CCalculatorFactory(void) { } Factory::CCalculatorFactory::~CCalculatorFactory(void) { } Operation::COperationBase* Factory::CCalculatorFactory::Create(char a_operator) { Operation::COperationBase *operation; switch (a_operator) { case '+': { operation = new Operation::CAddOperation(); break; } case '-': { operation = new Operation::CSubOperation(); break; } case '*': { operation = new Operation::CMulOperation(); break; } case '/': { operation = new Operation::CDivOperation(); break; } default: { break; } } return operation; }
6.2.4 main
#include <iostream> #include "OperationBase.h" #include "CalculatorFactory.h" int main(int argc, char **argv) { double first_num = 0; double sec_num = 0; char opertor = 0; double ret = 0; while(1) { fflush(stdin); std::cin >> first_num >> opertor >> sec_num; Operation::COperationBase *oper = Factory::CCalculatorFactory::Create(opertor); if (NULL == oper) { break; } oper->SetFirstNum(first_num); oper->SetSecondNum(sec_num); std::cout << oper->GetResult() << std::endl; if (NULL != oper) { delete(oper); } } return 0; }
6.3 简单工厂UML类图
相关文章推荐
- C++设计模式之一 工厂模式(简单工厂、工厂和抽象工厂)zz
- C++设计模式之一 工厂模式(简单工厂、工厂和抽象工厂)
- C++设计模式之一 工厂模式(简单工厂、工厂和抽象工厂)
- c++设计模式--简单工厂模式
- c++设计模式之简单工厂模式
- C++设计模式:简单工厂模式
- .C++设计模式之一 工厂模式(简单工厂、工厂和抽象工厂)
- C++设计模式之一 工厂模式(简单工厂、工厂和抽象工厂)
- 设计模式之简单工厂模式:c++实现
- 设计模式 -- 简单工厂模式 -- c++实现
- 设计模式之简单工厂,工厂方法模式(c++)
- C++设计模式之简单工厂模式
- c++设计模式之简单工厂
- 【C++深入浅出】设计模式学习之简单工厂
- 设计模式的C++实现 24.简单工厂模式
- 设计模式 简单工厂 c++实现
- C++设计模式之简单工厂、工厂模式、抽象工厂
- c++设计模式之简单工厂模式
- C++设计模式之一 工厂模式(简单工厂、工厂和抽象工厂)
- c++ 设计模式之简单的工厂模式