设计模式之简单工厂C++实现
来源:互联网 发布:和程序员有关的网名 编辑:程序博客网 时间:2024/06/04 19:15
一.简单工厂模式又称静态工厂方法模式(Static Factory Method),它不是Gof 所讲的23种设计模式之一,但是它却是我们在编码过程中经常使用的方法之一。
1.静态工厂方法统一管理对象的创建。
静态工厂方法通过传入的参数判断决定创建哪一个产品的实例,封装了对象的创建,客户端只管消费,实现了对责任(模块)的分割。
2.静态工厂方法推迟了产品的实例化。
通过XML配置文件就能改变具体要创建的产品实例,修改为其它的产品实例,代码不须重新编译。
二.简单工厂模式还是有缺点的,后面的工厂方法模式和抽象工厂模式就是对这些缺点的改善。讲完了这三种模式将会有一个对比。以下以Nokia手机为例,采用简单工厂模式设计的源代码雏形。
- /* Nokia抽象产品 */
- #pragma once
- #include <string>
- #include <iostream>
- class CNokia
- {
- public:
- CNokia(void);
- public:
- virtual ~CNokia(void);
- public:
- virtual bool MakeCall(const std::string & number) const = 0;
- };
- #include "Nokia.h"
- CNokia::CNokia(void)
- {
- }
- CNokia::~CNokia(void)
- {
- }
- #pragma once
- #include "nokia.h"
- class CN96 : public CNokia
- {
- public:
- CN96(void);
- public:
- virtual ~CN96(void);
- public:
- virtual bool MakeCall(const std::string & number) const;
- };
- /* N96型号的Nokia手机产品类 */
- #include "N96.h"
- CN96::CN96(void)
- {
- std::cout << "生产一部N96" << std::endl;
- }
- CN96::~CN96(void)
- {
- }
- bool CN96::MakeCall(const std::string & number) const
- {
- std::cout << "我在用N96,拨打号码是:" << number.c_str() << std::endl;
- return false;
- }
- #pragma once
- #include "nokia.h"
- class CN95 :public CNokia
- {
- public:
- CN95(void);
- public:
- virtual ~CN95(void);
- public:
- virtual bool MakeCall(const std::string & number) const;
- };
- /* N95型号的Nokia手机产品类 */
- #include "N95.h"
- CN95::CN95(void)
- {
- std::cout << "生产一部N95" << std::endl;
- }
- CN95::~CN95(void)
- {
- }
- bool CN95::MakeCall(const std::string & number) const
- {
- std::cout << "我在用N95,拨打号码是:" << number.c_str() << std::endl;
- return false;
- }
- /*N85, N81, ...*/
- /* 工厂类 */
- #pragma once
- #include "N96.h"
- #include "N95.h"
- #include "N85.h"
- #include "N81.h"
- #include <cassert>
- class CNokiaSimpleFactory
- {
- public:
- CNokiaSimpleFactory(void);
- public:
- ~CNokiaSimpleFactory(void);
- public:
- /* 静态工厂方法 */
- static CNokia * CreateNokia(const std::string & model);
- };
- #include "NokiaSimpleFactory.h"
- CNokiaSimpleFactory::CNokiaSimpleFactory(void)
- {
- }
- CNokiaSimpleFactory::~CNokiaSimpleFactory(void)
- {
- }
- CNokia * CNokiaSimpleFactory::CreateNokia(const std::string & model)
- {
- if (model == "N96")
- {
- return new CN96();
- }
- else if (model == "N95")
- {
- return new CN95();
- }
- else if (model == "N85")
- {
- return new CN85();
- }
- else if (model == "N81")
- {
- return new CN81();
- }
- else
- {
- assert(false);
- }
- return NULL;
- }
- /* main方法,可以看做客户端 */
- #include "stdafx.h"
- #include "NokiaSimpleFactory.h"
- int _tmain(int argc, _TCHAR* argv[])
- {
- CNokia * nokia = NULL;
- /*
- modeName 可以从外部XML文件中读取,运行过程中动态的
- 决定该创建哪一种型号的手机
- */
- std::string modeName = "N96";
- nokia = CNokiaSimpleFactory::CreateNokia(modeName);
- nokia->MakeCall("123456789");
- delete nokia;
- nokia = NULL;
- return 0;
- }
- C#--设计模式之简单工厂模式
- 设计模式之简单工厂,工厂方法模式(c++)
- 设计模式之简单工厂C++实现
- 《大话设计模式》之 简单工厂模式 Delphi/C shap /JAVA 实现
- 《大话设计模式》之 简单工厂模式 Delphi/C shap /JAVA 实现
- C语言实现设计模式之简单工厂模式(无内存泄露)
- 设计模式 之简单工厂+ 工厂模式
- 设计模式之简单工厂模式(使用C++)
- C#--简单工厂设计模式
- 大话设计模式之C++实现---简单工厂模式
- 设计模式之简单工厂模式:c++实现
- 设计模式之简单工厂模式,C++实现
- scala实现设计模式之简单工厂模式
- 设计模式之 简单工厂模式(C++实现)
- 设计模式之 简单工厂模式(C++ 模板实现)
- 设计模式之简单工厂模式(C++实现)
- 设计模式之工厂方法模式的简单实现
- 设计模式之抽象工厂模式的简单实现
- Ubuntu下deb包的安装方法
- dml语句执行过程和数据写入
- Linux启动新进程的几种方法及比较
- ubuntu12.04 roo用户无法使用 chrome 浏览器
- oc获取随机数(主要是c语言的随机数)
- 设计模式之简单工厂C++实现
- 2013学历提升,要搞清楚几件事
- 超文本传输协议-HTTP/1.1
- 《程序猿的搬砖生活》四、新的开始
- C++标准IO-串流类
- 读《小菜编程成长记》理解三层架构的一些记录
- android实现两个listview的同步滚动
- C++标准IO-输入状态
- ubuntu中svn客户端使用