(C++实现)——工厂方法模式(Factory Method Pattern)
来源:互联网 发布:c高级编程第10版 中文 编辑:程序博客网 时间:2024/05/18 03:26
工厂方法模式不同于简单工厂模式的地方在于工厂方法模式把对象的创建过程放到里子类里。这样工厂父对象和产品父对象一样,可以是抽象类或者接口,只定义相应的规范或操作,不涉及具体的创建或实现细节。
其类图如下:
实例代码为:
- #pragma once
- class IProduct
- {
- public:
- IProduct(void);
- virtual ~IProduct(void);
- };
- #pragma once
- #include "iproduct.h"
- class IPad :
- public IProduct
- {
- public:
- IPad(void);
- ~IPad(void);
- };
- #pragma once
- #include "iproduct.h"
- class IPhone :
- public IProduct
- {
- public:
- IPhone(void);
- ~IPhone(void);
- };
- #pragma once
- #include"IProduct.h"
- class IFactory
- {
- public:
- IFactory(void);
- virtual ~IFactory(void);
- virtual IProduct* getProduct();
- };
- #pragma once
- #include "ifactory.h"
- class IPadFactory :
- public IFactory
- {
- public:
- IPadFactory(void);
- ~IPadFactory(void);
- virtual IProduct* getProduct();
- };
- #pragma once
- #include "ifactory.h"
- class IPhoneFactory :
- public IFactory
- {
- public:
- IPhoneFactory(void);
- ~IPhoneFactory(void);
- virtual IProduct* getProduct();
- };
关键的实现:
- #include "StdAfx.h"
- #include "IPadFactory.h"
- #include"IPad.h"
- IPadFactory::IPadFactory(void)
- {
- }
- IPadFactory::~IPadFactory(void)
- {
- }
- IProduct* IPadFactory::getProduct()
- {
- return new IPad();
- }
- #include "StdAfx.h"
- #include "IPhoneFactory.h"
- #include"IPhone.h"
- IPhoneFactory::IPhoneFactory(void)
- {
- }
- IPhoneFactory::~IPhoneFactory(void)
- {
- }
- IProduct* IPhoneFactory::getProduct()
- {
- return new IPhone();
- }
调用方式:
- #include "stdafx.h"
- #include"IFactory.h"
- #include"IPadFactory.h"
- #include"IPhoneFactory.h"
- #include"IProduct.h"
- int _tmain(int argc, _TCHAR* argv[])
- {
- IFactory *fac = new IPadFactory();
- IProduct *pro = fac->getProduct();
- fac = new IPhoneFactory();
- pro = fac->getProduct();
- return 0;
- }
应用场景:
1. .net里面的数据库连接对象就是产生数据命令对象的工厂。每种数据库的connection对象里(继承自IDbConnection)都有对自己createCommand(定义在IDbCommand里)的实现。
2. .net里面的迭代器,IEnumerable定义了迭代器的接口,即工厂方法,每一个继承自IEnumerable的类都要实现GetEnumerator。可以参看ArrayList,String的GetEnumerator方法。他们都继承自IEnumerable。
参考资料:
1.Dot Net设计模式—工厂方法模式 http://fineboy.cnblogs.com/archive/2005/08/04/207459.html
2.工厂方法模式 http://www.cnblogs.com/cbf4life/archive/2009/12/20/1628494.html
LCL_data原创于CSDN.Net【http://blog.csdn.net/lcl_data/article/details/8712834】
- 工厂方法模式(factory method pattern)
- 工厂方法模式(Factory Method Pattern)
- 工厂方法模式(Factory Method Pattern)
- 工厂方法模式(Factory Method Pattern)
- 工厂方法模式(Factory Method Pattern)
- 工厂方法模式(factory method pattern)
- 工厂方法模式(Factory Method Pattern)
- 工厂方法模式(Factory Method Pattern)
- 工厂方法模式(Factory Method Pattern)。
- (C++实现)——工厂方法模式(Factory Method Pattern)
- 我所理解的设计模式(C++实现)——工厂方法模式(Factory Method Pattern)
- 我所理解的设计模式(C++实现)——工厂方法模式(Factory Method Pattern)
- 我所理解的设计模式(C++实现)——工厂方法模式(Factory Method Pattern)
- 设计模式(6)——工厂方法模式(Factory Method Pattern)
- 设计模式——工厂方法模式(Factory Method Pattern)
- 如何让孩子爱上设计模式 —— 5.工厂方法模式(Factory Method Pattern)
- 设计模式——工厂方法模式【Factory Method Pattern】
- 【设计模式】Factory Method Pattern——工厂方法模式
- jeecms 2012 源码分析(2) 前台栏目页静态化分析
- (C++实现)——简单工厂模式(Simple Factory Pattern)
- 如何防止显示全部上机学生时重复
- 若干算法题目备忘
- 日期与天干地支算法
- (C++实现)——工厂方法模式(Factory Method Pattern)
- Android中实时视频传输(摄像头实时视频传输)解决方案<二>
- c++私有继承
- hdu_4403 A very hard Aoshu problem 暴力搜索
- (C++实现)——抽象工厂模式(Abstract Factory Pattern)
- Linux中ls对文件进行按大小排序和按时间排序
- JAVA中的String Pool .
- C语言复杂声明:char *(*(**(*(*(*x[5])(int,float))[][12])(double))(short,long))[][173];
- 天干地支与阴阳五行的关系