二十三种设计模式——工厂模式
来源:互联网 发布:淘宝店铺客服工资 编辑:程序博客网 时间:2024/06/06 17:09
二十三种设计模式——工厂模式
简单工厂模式
简单工厂模式又称静态工厂方法(StaticFactory Method)模式,不属于23种模式之一。
简单工厂模式是工厂模式最简单使用的模式。
类图:
程序:
#include <iostream>#include<string>using namespace std; class NationalFlag//父类{ public: NationalFlag(){} ~NationalFlag(){} virtual void display()const = 0;};class ChinaFlag:public NationalFlag//子类中国国旗{ public: ChinaFlag() { cout<<"生产中国国旗"<<endl; } ~ChinaFlag(){} void display() const { cout<<"中国国旗完成"<<endl; //cout<<"长:"<<length<<"宽:"<<width<<endl; }};class UsaFlag:public NationalFlag//子类美国国旗{ public: UsaFlag() { cout<<"正在生产美国国旗"<<endl; } void display() const { cout<<"美国国旗完成"<<endl; //cout<<"长:"<<length<<"宽:"<<width<<endl; }};class factory//简单工厂{ public: static NationalFlag *createFlag(string type) { if(type=="USA") { return new UsaFlag(); } else if(type=="china") { return new ChinaFlag(); } return NULL; }};int main(){ NationalFlag *n=NULL; n=factory::createFlag("china"); n->display(); delete n; n=NULL; //cout << "Hello world!" << endl; return 0;}
是否满足开闭原则:
遵循开闭原则设计出的模块具有两个主要特征:
(1)对于扩展是开放的(Open for extension)。这意味着模块的行为是可以扩展的。当应用的需求改变时,我们可以对模块进行扩展,使其具有满足那些改变的新行为。也就是说,我们可以改变模块的功能。
(2)对于修改是关闭的(Closed for modification)。对模块行为进行扩展时,不必改动模块的源代码或者二进制代码。模块的二进制可执行版本,无论是可链接的库、DLL或者.EXE文件,都无需改动。
一部分满足开闭原则:1、增加功能时可以不用改变原有的程序。2、但是想增加一些复杂的功能变得非常困难。
是否满足可复用性和可扩展性:
满足可复用性、不满足可维护性:因为简单工厂中都是模块与模块之间联系,所以可复用性比较好。当系统中的具体产品类不断增多时候,可能会出现要求工厂类根据不同条件创建不同实例的需求.这种对条件的判断和对具体产品类型的判断交错在一起,很难避免模块功能的蔓延,对系统的维护和扩展非常不利。
工厂模式:
类图:
程序
#include <iostream>#include<string>using namespace std; class NationalFlag//父类{ public: NationalFlag(){} ~NationalFlag(){} virtual void display()const = 0;};class ChinaFlag:public NationalFlag//子类中国国旗{ public: ChinaFlag() { cout<<"生产中国国旗"<<endl; } ~ChinaFlag(){} void display() const { cout<<"中国国旗完成"<<endl; //cout<<"长:"<<length<<"宽:"<<width<<endl; }};class UsaFlag:public NationalFlag//子类美国国旗{ public: UsaFlag() { cout<<"正在生产美国国旗"<<endl; } void display() const { cout<<"美国国旗完成"<<endl; //cout<<"长:"<<length<<"宽:"<<width<<endl; }};class factory//简单工厂{ public: factory(){} ~factory(){} virtual NationalFlag *createFlag(string type) const=0;};class chinaFactory: public factory{ public: chinaFactory(){cout<<"中国国旗工厂"<<endl;} ~chinaFactory(){} NationalFlag * createFlag(string type) const { return new ChinaFlag(); }};class UsaFactory:public factory{ public: UsaFactory(){cout<<"美国国旗工厂"<<endl;} ~UsaFactory(){} NationalFlag * createFlag(string type) const { return new UsaFlag(); }};int main(){ factory * f=NULL; f=new chinaFactory(); NationalFlag *n=f->createFlag("中国"); n->display(); //cout << "Hello world!" << endl; return 0;}
是否满足开闭原则:
满足开闭原则:1、增加功能时可以不用改变原有的程序。并且可以增加一些复杂的功能
是否满足可复用性和可扩展性:
满足可复用性与可维护性:因为每个产品与工厂都独立,所以需要哪个就直接使用就可以了,所以满足复用。可维护性:因为增加了工厂类,每一个工厂生产每一类产品。就算增加了,只需要在增加工厂就可以了。维护性好。
0 0
- 二十三种设计模式——工厂模式
- 二十三种设计模式之工厂模式
- [设计模式]二十三种设计模式
- 二十三种设计模式
- 二十三种设计模式
- 二十三种设计模式
- 二十三种设计模式
- 二十三种设计模式
- 二十三种设计模式
- 二十三种设计模式
- 二十三种设计模式之创建型模式之工厂方法
- 二十三种设计模式之创建型模式之抽象工厂
- 设计模式(二十三)——解释器模式
- 设计模式—访问者模式(二十三)
- 设计模式(十三)抽象工厂模式
- 【设计模式】【十三】抽象工厂模式
- 设计模式—工厂模式
- 设计模式—工厂模式
- 组件与插件
- IAT HOOK
- host文件修改
- 营销型网页设计中需要注意的几个问题
- 浏览器 HTTP 协议缓存机制详解及Http协议预处理工具类
- 二十三种设计模式——工厂模式
- 论Nim中的 proc 和 method
- ajax语句的使用
- ArcGIS教程:主成分分析
- 我的感想
- Java异常处理的陋习展播
- java容器类---HashMap、HashSet
- jQuery.fn.xx和$().xx
- 1021: [SHOI2008]Debt 循环的债务