第八章 雷锋依然在人间-工厂方法模式(读书笔记)
来源:互联网 发布:商周青铜器 知乎 编辑:程序博客网 时间:2024/05/19 01:59
雷锋依然在人间-工厂方法模式
1.简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖。
2.工厂方法模式(Factory Method)定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到子类。
3.工厂方法模式的好处就是在扩展功能的时候,只要扩展了变化,不用修改现有的类了,也就完全符合了开放-封闭原则。
4.工厂方法把简单工厂的内部逻辑判断移到了客户端代码来进行。你想要加功能,搬来是改工厂类的,而现在是修改客户端。
5.工厂方法模式是简单工厂模式的进一步抽象和推广。由于使用了多态性,工厂方法模式保持了简单工厂模式的优点,而且克服了它的缺点。但缺点是由于每加一个产品,就需要加一个产品工厂的类,增加了额外的开发量。
6.老人不需要知道谁来做好事,他只需知道是学雷锋的人来帮忙就可以了。
8.1 Operation.h
#pragma onceclass 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;}};
8.2 IFactory.h
#pragma once #include "Operation.h"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();};};
8.3 客户端
#include "stdafx.h"#include "IFactory.h"int _tmain(int argc, _TCHAR* argv[]){IFactory* operFactory = new AddFactory();Operation* oper = operFactory->CreateOperation();oper->setA(1);oper->setB(2);double result = oper->GetResult();delete operFactory;delete oper;return 0;}
- 第八章 雷锋依然在人间-工厂方法模式(读书笔记)
- 第八章 雷锋依然在人间---工厂方法模式(读书笔记)
- 【设计模式】雷锋依然在人间 --- 工厂方法模式
- 雷锋依然在人间 --- 工厂方法模式
- 工厂方法模式Python版--雷锋依然在人间
- 雷锋依然在人间—工厂方法模式
- 《大话设计模式》之--第8章 雷锋依然在人间----工厂方法模式
- 《大话设计模式》之--第8章 雷锋依然在人间----工厂方法模式
- 第8章 雷锋依然在人间-工厂方法模式 大话设计模式
- 《大话设计模式》--雷锋依然在人间--工厂方法模式<Factory Method>(8)
- 大话设计模式-第08章 雷锋依然在人间--工厂方法模式
- 8. 雷锋依然在人间 -- 工厂方法模式(Factory Method Pattern)
- 《大话设计模式》—— 读后感(8)雷锋依然在人间——工厂方法模式
- 《大话设计模式》——读后感 (5)雷锋依然在人间?——工厂方法模式
- 读书笔记--工厂方法模式
- 第八话-工厂方法模式
- 读书笔记6:工厂方法模式
- 读书笔记6:工厂方法模式
- JLINK烧写步骤
- 从头开始为BeagleBoard编译Android系统
- 第七章 为别人做嫁衣-代理模式(读书笔记)
- 第九章 简历复印-原型模式(学习笔记)
- 【Android进阶】天天动听 悬浮歌词(迷你歌词)效果解读
- 第八章 雷锋依然在人间-工厂方法模式(读书笔记)
- 【Android】获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)(应用图片、应用名、包名等)
- 改变Eclipse背景色
- 交换机的工作原理浅析
- 利用tcl脚本文件配置FPGA硬件引脚
- Android 内存监测工具 DDMS --> Heap
- PLL配置
- verilog实现多位数值比较器
- 半加器与全加器