我所理解的設計模式(C++實現)——工廠方法模式(Factory Method Pattern)
工廠方法模式不同於簡單工廠模式的地方在於工廠方法模式把物件的建立過程放到裡子類裡。這樣工廠父物件和產品父物件一樣,可以是抽象類或者介面,只定義相應的規範或操作,不涉及具體的建立或實現細節。
其類圖如下:
例項程式碼為:
#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】
相關文章
- 我所理解的設計模式(C++實現)——抽象工廠模式(Abstract Factory Pattern)設計模式C++抽象
- 設計模式--工廠方法模式(Factory Method Pattern)設計模式
- 我所理解的設計模式(C++實現)——簡單工廠模式(Simple Factory Pattern)設計模式C++
- JAVA設計模式之 工廠方法模式【Factory Method Pattern】Java設計模式
- 設計模式之工廠方法模式(FACTORY METHOD)設計模式
- 使用C# (.NET Core) 實現簡單工廠(Simple Factory) 和工廠方法設計模式 (Factory Method Pattern)C#設計模式
- 設計模式(Design Patterns)工廠方法模式(Factory Method)設計模式
- C#設計模式系列:工廠方法模式(Factory Method)C#設計模式
- 設計模式的征途—3.工廠方法(Factory Method)模式設計模式
- 設計模式--抽象工廠模式(Abstract Factory Pattern)設計模式抽象
- 設計模式實戰 – 抽象工廠模式(Abstract Factory Pattern)設計模式抽象
- 設計模式實戰 - 抽象工廠模式(Abstract Factory Pattern)設計模式抽象
- 我所理解的設計模式(C++實現)——原型模式(Prototype Pattern)設計模式C++原型
- 我所理解的設計模式(C++實現)——建造者模式(Builder Pattern)設計模式C++UI
- 我所理解的設計模式(C++實現)——橋模式(Bridge Pattern)設計模式C++
- Factory Method 工廠方法模式(建立型模式)模式
- 我所理解的設計模式(C++實現)——組合模式(Composite Pattern)設計模式C++
- 我所理解的設計模式(C++實現)——單例模式(Singleton Pattern)設計模式C++單例
- 設計模式系列之工廠模式三兄弟(Factory Pattern)設計模式
- JAVA設計模式之 抽象工廠模式【Abstract Factory Pattern】Java設計模式抽象
- 我所理解的設計模式(C++實現)——介面卡模式(Adapter Pattern)設計模式C++APT
- 【圖解設計模式系列】The Abstract Factory Pattern: 抽象工廠模式圖解設計模式抽象
- JAVA設計模式之 簡單工廠模式【Simple Factory Pattern】Java設計模式
- 簡單工廠模式(Simple Factory Pattern)模式
- 《設計模式》 - 2. 工廠模式( Factory )設計模式
- 設計模式--工廠模式Factory(建立型)設計模式
- Java設計模式之工廠模式(Factory)Java設計模式
- 我的Java設計模式-工廠方法模式Java設計模式
- Scala 與設計模式(四):Factory 工廠模式設計模式
- [Design Pattern With Go]設計模式-工廠模式Go設計模式
- JAVA設計模式之 模板方法模式【Template Method Pattern】Java設計模式
- 設計模式-工廠模式二(工廠方法模式)設計模式
- 設計模式-Template Method Pattern設計模式
- AspectJ實現設計模式(三)——工廠方法模式 (轉)設計模式
- 設計模式的征途—4.抽象工廠(Abstract Factory)模式設計模式抽象
- 設計模式之工廠方法模式|抽象工廠模式設計模式抽象
- 設計模式筆記:簡單工廠模式(Simple Factory)設計模式筆記
- 設計模式 - 工廠方法模式設計模式