我所理解的設計模式(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】
相關文章
- 設計模式--工廠方法模式(Factory Method Pattern)設計模式
- 使用C# (.NET Core) 實現簡單工廠(Simple Factory) 和工廠方法設計模式 (Factory Method Pattern)C#設計模式
- 設計模式--抽象工廠模式(Abstract Factory Pattern)設計模式抽象
- 設計模式-抽象工廠模式(Abstract Factory Pattern)設計模式抽象
- 設計模式實戰 - 抽象工廠模式(Abstract Factory Pattern)設計模式抽象
- 設計模式實戰 – 抽象工廠模式(Abstract Factory Pattern)設計模式抽象
- 設計模式系列之工廠模式三兄弟(Factory Pattern)設計模式
- 【圖解設計模式系列】The Abstract Factory Pattern: 抽象工廠模式圖解設計模式抽象
- 簡單工廠模式( Simple Factory Pattern )模式
- 《設計模式》 - 2. 工廠模式( Factory )設計模式
- 工廠方法(Factory Method)
- [Design Pattern With Go]設計模式-工廠模式Go設計模式
- 設計模式-工廠模式二(工廠方法模式)設計模式
- 設計模式 - 工廠方法模式設計模式
- 【設計模式】工廠方法模式設計模式
- 設計模式~~~工廠方法模式設計模式
- 設計模式-工廠方法模式設計模式
- 設計模式-簡單工廠、工廠方法模式、抽象工廠模式設計模式抽象
- PHP設計模式(一)簡單工廠模式 (Simple Factory For PHP)PHP設計模式
- 用Python實現設計模式——工廠模式Python設計模式
- 使用C# (.NET Core) 實現抽象工廠設計模式 (Abstract Pattern)C#抽象設計模式
- 設計模式之工廠方法模式設計模式
- python設計模式-工廠方法模式Python設計模式
- java設計模式-工廠方法模式Java設計模式
- Java 設計模式之工廠方法模式與抽象工廠模式Java設計模式抽象
- 工廠方法--設計模式設計模式
- 設計模式之工廠模式!深入解析簡單工廠模式,工廠方法模式和抽象工廠模式設計模式抽象
- JAVA設計模式 3【建立型】理解工廠模式與抽象工廠模式Java設計模式抽象
- Go 實現常用設計模式(六)工廠模式Go設計模式
- C++設計模式——命令模式(command pattern)C++設計模式
- golang設計模式之工廠方法模式Golang設計模式
- Java設計模式之工廠方法模式Java設計模式
- 《Head First 設計模式》:工廠方法模式設計模式
- Java設計模式(二):工廠方法模式Java設計模式
- 設計模式(三)抽象工廠方法模式設計模式抽象
- 掌握設計模式之工廠方法模式設計模式
- 設計模式筆記---工廠方法模式設計模式筆記
- 重學 Java 設計模式:實戰工廠方法模式Java設計模式
- 使用C# (.NET Core) 實現模板方法模式 (Template Method Pattern)C#模式