抽象工廠,工廠方法,簡單工廠對比
建立型類模式将一個對象的部分建立工作延遲到子類,而建立型對象模式則将它延遲到另一個對象中。
建立型:使得動态建立對象更靈活
結構型:添加第三方類降低耦合
行為型:滿足對象之間的動态行為特征
一、工廠方法-建立型類模式
http://blog.163.com/zhoumhan_0351/blog/static/3995422720104277410773
class Product{//定義産品的抽象類
public:
Product(){}
//...一些操作
}
class Product1:public Product{//具體産品
public:
Product1(){}
//...一些操作
}
class Product2:public Product{//具體産品
public:
Product1(){}
//...一些操作
}
class Creator{//抽象類
public:
Creator(){}//可以定義一些預設操作
virtual Product* Create(ProductId);//工廠方法
//...
//一些操作,比如對傳回的Product進行操作,或者對建立Product
//的一些輔助操作,都可以聲明為virtual
}
class Creator1:public Creator{//具體應用1
public:
Creator1(){}//可以定義一些預設操作
Product* Create(ProductId);//工廠方法
//...
//一些操作,比如對傳回的Product進行操作,或者對建立Product
//的一些輔助操作,都可以聲明為virtual
}
class Creator2:public Creator{//具體應用2
public:
Creator2(){}//可以定義一些預設操作
Product* Create(ProductId);//工廠方法
//...
//一些操作,比如對傳回的Product進行操作,或者對建立Product
//的一些輔助操作,都可以聲明為virtual
}
通過工廠方法,将一個對象的部分建立工作延遲到子類,解耦産品的實作和使用。友善了産品改變。
二、簡單工廠
給工廠方法參數化,則稱為簡單工廠。
Product* Creator::Create(ProductId ID){
if(MINE==id) return new MyProduct;
if(YOURS==id) return new YourProduct;
//...
return 0;
}
類建立型模式之工廠方法(Factory Method)
http://blog.163.com/zhoumhan_0351/blog/static/39954227201031393276
三、抽象工廠-對象建立型模式
提供一個建立一系列相關或互相依賴對象的接口,而無需指定它們具體的類。
建立型模式簡介
http://blog.163.com/zhoumhan_0351/blog/static/3995422720104277410773/
常常用工廠方法實作抽象工廠中具體的工廠。
class AbstractProductA{
public:
AbstractProductA(){}
//...
}
class AbstractProductA1:public AbstractProductA{
public:
AbstractProductA1(){}
//...
}
class AbstractProductA2:public AbstractProductA{
public:
AbstractProductA2(){}
//...
}
class AbstractProductB{
public:
AbstractProductB(){}
//...
}
class AbstractProductB1:public AbstractProductB{
public:
AbstractProductB1(){}
//...
}
class AbstractProductB2:public AbstractProductB{
public:
AbstractProductB2(){}
//...
}
class AbstractFactory{
AbstractFactory(){}
//下面每一個接口通常都是通過工廠方法來實作
virtual AbstractProductA* CreateProcudtA(){}//=0
virtual AbstractProductB* CreateProcudtB(){}//=0
//...
}
class ConcreteFactory1{
ConcreteFactory1(){}
//下面每一個接口通常都是通過工廠方法來實作
virtual AbstractProductA* CreateProcudtA(){}
virtual AbstractProductB* CreateProcudtB(){}
//...
}
class ConcreteFactory2{
ConcreteFactory2(){}
//下面每一個接口通常都是通過工廠方法來實作
virtual AbstractProductA* CreateProcudtA(){}
virtual AbstractProductB* CreateProcudtB(){}
//...
}
由此,我們可以看到,抽象工廠作為對象型建立模式,主要提供建立所需對象的一系列接口(這些接口通常通過工廠方法實作),這些對象通過組合方式來組建對象。缺點是如果使用者擴充接口,則抽象工廠需要改變。
而工廠方法作為類建立型模式,通過繼承來建立對象,将一個類的執行個體化延遲到其子類。
兩者都封裝對象建立,來實作使用者與所使用的具體産品(使用者與産品)之間的解耦。
四、OO Principles
封裝變化的量
組合優先于繼承
面向接口程式設計,而非實作
尋求對象繼承間的松耦合
Classes should be open for extension but closed for modification
幾個與設計模式相關的基本概念和原則
http://blog.163.com/zhoumhan_0351/blog/static/399542272010230103414517
設計模式基本原則
http://blog.163.com/zhoumhan_0351/blog/static/3995422720105655438106