第八章 雷锋依然在人间---工厂方法模式(读书笔记)
来源:互联网 发布:降温软件排行第一 编辑:程序博客网 时间:2024/05/05 19:46
一:简单工厂模式
简单工厂的UML图:
代码如下:
#include<iostream> #include<string> using std::cout; using std::endl; using std::cin; using std::string; //基类 class Operation { public: Operation():m_numberA(0),m_numberB(0) { }; Operation(double numberA,double numberB):m_numberA(numberA),m_numberB(numberB) { }; double getA() { return m_numberA; }; double getB() { return m_numberB; }; void setA(double number) { m_numberA = number; }; void setB(double number) { m_numberB = number; }; virtual double GetResult()//多态性 { return 0; } protected: double m_numberA; double m_numberB; }; //加法类 class OperationAdd :public Operation //继承 { public: double GetResult() { double result = 0; result = m_numberA + m_numberB; return result; } }; //减法类 class OperationSub :public Operation { public: double GetResult() { double result = 0; result = m_numberA - m_numberB; return result; } }; //乘法类 class OperationMul :public Operation { public: double GetResult() { double result = 0; result = m_numberA * m_numberB; return result; } }; //除法类 class OperationDiv :public Operation { public: double GetResult() { double result = 0; if ( m_numberB == 0 ) throw "除数不能为0"; result = m_numberA / m_numberB; return result; } }; //计算工厂设计模式 class OperationFactory { public: static Operation* createOperate(char oper) //封装 { Operation* myOper=NULL; switch (oper) { case '+': myOper=new OperationAdd(); break; case '-': myOper = new OperationSub(); break; case '*': myOper = new OperationMul(); break; case '/': myOper = new OperationDiv(); break; default: break; }; return myOper; } }; void main() { int operaterA,operaterB; cout<<"请输入数字A"<<endl; cin>>operaterA; cout<<"请输入数字B"<<endl; cin>>operaterB; Operation* op=OperationFactory::createOperate('*'); op->setA(operaterA); op->setB(operaterB); cout<<operaterA<<" * "<<operaterB<<" 的结果为: "<<endl; cout<<op->GetResult()<<endl; }工厂方法的UML:
本次程序的UML:
代码实现如下:
#include<iostream>
#include<string>using std::cout;using std::endl;using std::string;class Operation { public: Operation() :m_numberA(0),m_numberB(0) { }; Operation(double numberA, double numberB) :m_numberA(numberA),m_numberB(m_numberB) { }; double getA() { return m_numberA; }; void setA(double number) { m_numberA = number; }; double getB() { return m_numberB; }; void setB(double number) { m_numberB = number; }; virtual double GetResult() { return 0; } protected: double m_numberA; double m_numberB; }; class OperationAdd :public Operation { public: double GetResult() { double result = 0; result = m_numberA + m_numberB; return result; } }; class OperationSub :public Operation { public: double GetResult() { double result = 0; result = m_numberA - m_numberB; return result; } }; class OperationMul :public Operation { public: double GetResult() { double result = 0; result = m_numberA * m_numberB; return result; } }; class OperationDiv :public Operation { public: double GetResult() { double result = 0; if ( m_numberB == 0 ) throw "被除数不能为零"; result = m_numberA / m_numberB; return result; } };class IFactory { public: virtual Operation* CreateOperation(void) = 0; }; //加法工厂 class AddFactory :public IFactory { public: Operation* CreateOperation(void) { return new OperationAdd(); }; }; //减法工厂 class SubFactory :public IFactory { public: Operation* CreateOperation(void) { return new OperationSub(); }; }; //乘法工厂 class MulFactory :public IFactory { public: Operation* CreateOperation(void) { return new OperationMul(); }; }; //除法工厂 class DivFactory :public IFactory { public: Operation* CreateOperation(void) { return new OperationDiv(); }; }; int main() { IFactory* operFactory = new AddFactory(); Operation* oper = operFactory->CreateOperation(); oper->setA(1); oper->setB(2); double result = oper->GetResult(); cout<<result<<endl; delete operFactory; delete oper; return 0; }
1.简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖。
2.工厂方法模式(Factory Method)定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到子类。
3.工厂方法模式的好处就是在扩展功能的时候,只要扩展了变化,不用修改现有的类了,也就完全符合了开放-封闭原则。
4.工厂方法把简单工厂的内部逻辑判断移到了客户端代码来进行。你想要加功能,搬来是改工厂类的,而现在是修改客户端。
5.工厂方法模式是简单工厂模式的进一步抽象和推广。由于使用了多态性,工厂方法模式保持了简单工厂模式的优点,而且克服了它的缺点。但缺点是由于每加一个产品,就需要加一个产品工厂的类,增加了额外的开发量。
2.工厂方法模式(Factory Method)定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到子类。
3.工厂方法模式的好处就是在扩展功能的时候,只要扩展了变化,不用修改现有的类了,也就完全符合了开放-封闭原则。
4.工厂方法把简单工厂的内部逻辑判断移到了客户端代码来进行。你想要加功能,搬来是改工厂类的,而现在是修改客户端。
5.工厂方法模式是简单工厂模式的进一步抽象和推广。由于使用了多态性,工厂方法模式保持了简单工厂模式的优点,而且克服了它的缺点。但缺点是由于每加一个产品,就需要加一个产品工厂的类,增加了额外的开发量。
抽象工厂的UML:
0 0
- 第八章 雷锋依然在人间-工厂方法模式(读书笔记)
- 第八章 雷锋依然在人间---工厂方法模式(读书笔记)
- 【设计模式】雷锋依然在人间 --- 工厂方法模式
- 雷锋依然在人间 --- 工厂方法模式
- 工厂方法模式Python版--雷锋依然在人间
- 雷锋依然在人间—工厂方法模式
- 《大话设计模式》之--第8章 雷锋依然在人间----工厂方法模式
- 《大话设计模式》之--第8章 雷锋依然在人间----工厂方法模式
- 第8章 雷锋依然在人间-工厂方法模式 大话设计模式
- 《大话设计模式》--雷锋依然在人间--工厂方法模式<Factory Method>(8)
- 大话设计模式-第08章 雷锋依然在人间--工厂方法模式
- 8. 雷锋依然在人间 -- 工厂方法模式(Factory Method Pattern)
- 《大话设计模式》—— 读后感(8)雷锋依然在人间——工厂方法模式
- 《大话设计模式》——读后感 (5)雷锋依然在人间?——工厂方法模式
- 读书笔记--工厂方法模式
- 第八话-工厂方法模式
- 读书笔记6:工厂方法模式
- 读书笔记6:工厂方法模式
- N个数取m个数的全排列非递归
- Linux-6.5下 MariaDB-10基于LVM快照的备份数据 详解
- 第二章 2.2 求数组中给定下标区间内的第 K 小元素
- Android之SQLite
- 简单的应用程序创建POSTNET/PLANET 条形码控件POSTNET/PLANET Fontware
- 第八章 雷锋依然在人间---工厂方法模式(读书笔记)
- 咏早梅
- 唉
- 原生态在hadoop上运行java程序
- 第十二周项目1-public继承下的访问权限和继承方式
- 3ds max经验
- 送给前线码农的话 – 大牛们的经典语录
- 如何节约手游制作成本?揭秘CocoStudio编辑器强悍功能
- 【翻自LeetCode】求两排序后数组的中位数