Design Patterns----简单的工厂模式
来源:互联网 发布:sql while的用法 编辑:程序博客网 时间:2024/06/05 11:18
实例:
实现一个简单的计算器。实现加减乘除等操作。。
operator.h 文件
// copyright @ L.J.SHOU Mar.13, 2014// a simple calculator using Factory Design Pattern#ifndef OPERATOR_H_#define OPERATOR_H_#include <string>#include <iostream>#include <stdexcept>// base classclass Operator{public: Operator(double lhs, double rhs) : numberA(lhs), numberB(rhs){} virtual double GetResult() = 0;protected: double numberA; double numberB;};// "+" class OperatorAdd : public Operator{public: OperatorAdd(double lhs, double rhs) : Operator(lhs, rhs) { } double GetResult() { return numberA + numberB; }};// "-"class OperatorMinus : public Operator{public: OperatorMinus(double lhs, double rhs) : Operator(lhs, rhs) { } double GetResult() { return numberA - numberB; }};// "*"class OperatorMul : public Operator{public: OperatorMul(double lhs, double rhs) : Operator(lhs, rhs) { } double GetResult() { return numberA * numberB; }};// "/"class OperatorDiv : public Operator{public: OperatorDiv(double lhs, double rhs) : Operator(lhs, rhs) { } double GetResult() { if(numberB == 0) throw std::runtime_error("divide zero !!!"); return numberA / numberB; }};// factory functionOperator* createOperator(std::string oper, double lhs, double rhs){ Operator* pOper(NULL); if(oper == "+") { pOper = new OperatorAdd(lhs, rhs); } else if(oper == "-") { pOper = new OperatorMinus(lhs, rhs); } else if(oper == "*") { pOper = new OperatorMul(lhs, rhs); } else if(oper == "/") { pOper = new OperatorDiv(lhs, rhs); } else { std::cerr << "not a valid operator" << std::endl;return NULL; } return pOper;}#endif
operator.cc 文件
// copyright @ L.J.SHOU Mar.13, 2014// a simple calculator using Factory Design Pattern#include "operator.h"#include <iostream>#include <stdexcept>#include "boost/shared_ptr.hpp"using namespace std;int main(void){ try{ boost::shared_ptr<Operator> pOper(createOperator("+", 0, 1)); cout << pOper->GetResult() << endl; pOper = boost::shared_ptr<Operator>(createOperator("-", 0, 1)); cout << pOper->GetResult() << endl; pOper = boost::shared_ptr<Operator>(createOperator("*", 2, 3)); cout << pOper->GetResult() << endl; pOper = boost::shared_ptr<Operator>(createOperator("/", 1, 0)); cout << pOper->GetResult() << endl; } catch(std::runtime_error err){ std::cout << err.what() << std::endl; } return 0;}
参考:
大话设计模式
1 0
- Design Patterns----简单的工厂模式
- 【Design Patterns】-----工厂三姐妹之简单工厂
- 【Design Pattern】简单工厂模式
- 工厂方法模式——Head First Design Patterns
- 抽象工厂模式——Head First Design Patterns
- Design Patterns——Builder 模式、原型模式、工厂模式、抽象工厂模式
- head first design patterns(1):策略模式,观察者模式,工厂模式,抽象工厂模式
- (Design Patterns)设计模式的重要性
- 设计模式-Design Patterns
- Design Patterns---- Strategy 模式
- Design patterns 设计模式
- 【Design Patterns】命令模式
- 设计模式 - Design Patterns
- 设计模式(Design Patterns)-可复用面向对象软件的基础 02:工厂方法模式(Factory Method)和抽象工厂模式(Abstract Factory)
- Design Pattern: 简单工厂模式 v.s. 工厂方法模式
- 设计模式(Design Patterns)
- 设计模式(Design Patterns)
- 设计模式(Design Patterns)
- 黑马程序员---正则表达式
- 基于ARM11的嵌入式linux系统移植与实现--笔记三
- 用命令调试蓝牙遇到的问题,求高手指点
- iOS的多核编程和内存管理
- oracle 通过存储过程返回游标类型集合
- Design Patterns----简单的工厂模式
- (libgdx学习)Polling
- 名动漫CG绘画系列课视频教程在线观看
- 一步步学习SPD2010--第六章节--处理数据源(9)--连接Web部件
- mysql索引需要了解的几个注意
- Js字符串操作函数大全
- C#之面向对象的特性
- Android HAL硬件抽象层
- Myeclipse中设置编码utf-8