设计模式---工厂模式(Factory)
来源:互联网 发布:windows系统监控 编辑:程序博客网 时间:2024/06/04 00:43
工厂模式(Factory),专门实例化类的对象,隐藏类对象的创建过程。
先看UML图和对应C++代码:
#include <iostream>using namespace std;class base{ public: virtual void foo() = 0; virtual ~base(){}};class derived1:public base{ public: void foo() { cout << "called derived1's foo" << endl; }};class derived2:public base{ public: void foo() { cout << "called derived2's foo" << endl; }};class derived3:public base{ public: void foo() { cout << "called derived3's foo" << endl; }};class Proxy:public base{ public: Proxy(base *p):pb(p){} void foo() { pb->foo(); } private: base *pb;};class Factory{ public: Factory():pb(NULL){} base* Createderived1() { return pb = new derived1; } base* Createderived2() { return pb = new derived2; } base* Createderived3() { return pb = new derived3; } ~Factory() { if(NULL != pb) delete pb; } private: base* pb;};class Client{ public: void Function(Proxy* p) { p->foo(); }};int main(){ Factory mf; Proxy mpr(mf.Createderived1()); Client mc; mc.Function(&mpr); return 0;}
这个模式是因为代理模式暴漏了类对象的创建过程,因此在这个不完美的基础上加上工厂模式来隐藏对象的创建过程。
其实就是将具体类的创建交给了一个Factory类的接口来执行。这样客户端就只需要知道一个工厂类和一个代理类就可以完成相应的操作,隐藏了具体的类的所有信息。
从维护的角度来看,只需要去查看这两个类就行
从扩展的角度来看,我只要增加相应的具体类,另外在工厂类里加个相应的接口就行了,修改的地方相对很少。
这就最大程度的遵循了开放封闭的原则。但事实上还不够完美,因为我增加功能要修改工厂类并不是完全遵循开放封闭的原则,如果要做到完全不修改可以考虑反射模式。
- 工厂设计模式 factory
- Java设计模式:Factory(工厂模式)
- 设计模式之--工厂模式(Factory)
- Java设计模式 - Factory(工厂模式)
- 设计模式---工厂模式(Factory)
- 设计模式之--工厂模式(Factory)
- 设计模式之工厂模式(factory)
- 【设计模式】-工厂模式(Factory)
- 设计模式介绍:工厂模式(factory)
- 设计模式:工厂模式(Factory Pattern)
- 设计模式之工厂模式(Factory)
- 设计模式(一)工厂模式Factory
- 设计模式之工厂模式(Factory)
- 设计模式之工厂模式(Factory)
- 【设计模式】工厂模式(Factory Pattern)
- [设计模式]Factory工厂模式
- 设计模式--工厂模式Factory
- 设计模式 -- 工厂模式(Factory)
- [小教程]解决android中加入Lua脚本后安装APK报错的问题。
- js详解
- 3ds max 学习笔记
- u-boot启动代码start.S详解-补充
- http://acm.hdu.edu.cn/showproblem.php?pid=2689
- 设计模式---工厂模式(Factory)
- U-Boot启动的函数调用过程(以arm926ejs为例)
- DllImport路径问题
- 由浅入深理解索引的实现(1)
- JSTL 学习、应用记录
- c#调用c++ dll的几种类型转换
- U-boot如何启动内核
- 递归二进制
- poj1376 搜索(BFS)