我所理解的设计模式(C++实现)——工厂方法模式(Factory Method Pattern)
2013-03-24 15:16
696 查看
工厂方法模式不同于简单工厂模式的地方在于工厂方法模式把对象的创建过程放到里子类里。这样工厂父对象和产品父对象一样,可以是抽象类或者接口,只定义相应的规范或操作,不涉及具体的创建或实现细节。
其类图如下:
![](http://img.my.csdn.net/uploads/201303/24/1364109273_8613.png)
实例代码为:
关键的实现:
调用方式:
应用场景:
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【/article/1352957.html】
其类图如下:
![](http://img.my.csdn.net/uploads/201303/24/1364109273_8613.png)
实例代码为:
#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【/article/1352957.html】
相关文章推荐
- 我所理解的设计模式(C++实现)——工厂方法模式(Factory Method Pattern)
- 我所理解的设计模式(C++实现)——工厂方法模式(Factory Method Pattern)
- 我所理解的设计模式(C++实现)——抽象工厂模式(Abstract Factory Pattern)
- 我所理解的设计模式(C++实现)——抽象工厂模式(Abstract Factory Pattern)
- 我所理解的设计模式(C++实现)——简单工厂模式(Simple Factory Pattern)
- 极速理解设计模式系列:9.工厂方法模式(Factory Method Pattern)
- 极速理解设计模式系列:9.工厂方法模式(Factory Method Pattern)
- 极速理解设计模式系列:2.工厂方法模式(Factory Method Pattern)
- JAVA设计模式之 工厂方法模式【Factory Method Pattern】
- 设计模式学习笔记--工厂方法模式(Factory Method Pattern)【创建型模式】
- 我所理解的设计模式(C++实现)——装饰者模式(Decorator Pattern)
- 我所理解的设计模式(C++实现)——模板方法模式(Template Method Pattern)
- 我所理解的设计模式(C++实现)—— “一句话总结”和索引
- 设计模式---工厂方法模式(Factory Method Pattern)
- 我所理解的设计模式(C++实现)—— “一句话总结”和索引
- 我所理解的设计模式(C++实现)——组合模式(Composite Pattern)
- C#设计模式——工厂方法模式(Factory Method Pattern)
- 乐在其中设计模式(C#) - 工厂方法模式(Factory Method Pattern)
- 元对象我所理解的设计模式(C++实现)——享元模式(Flyweight Pattern)
- 设计模式 - 简单工厂模式/静态工厂模式(Static Factory Method) C++实现