工廠模式之——工廠方法模式

定義:

 定義一個用於創建對象的介面,讓子類決定實例化哪一個類。工廠方法使一個類的實例化延遲到其子類。

   相比於簡單工廠消去了內部判斷邏輯,遵守了開放封閉原則。但是程式碼量和邏輯複雜度更高了。

結構圖:

   

 

程式碼:水果工廠

(父類)水果類:

Class Fruit

{

  。。。

}

(子類)蘋果類:

Class Apple : Fruit

{

。。。

}

水果工廠抽象類:

Class FruitFactory

{

//生產水果抽象方法

Fruit*       CreateFruitFactory();

}

蘋果工廠子類:

Class AppleFactory : FruitFactory

{

//生產蘋果方法

Fruit*       CreateFruitFactory()
{
  return new Apple(); 
}

}

客戶端:

FruitFactory CFruitFactory = new AppleFactory();//如果要生產草莓,加一個草莓工廠,一個草莓水果子類,這裡換成new StrawberryFactory()就行了。

Fruit* CFruit = CFruitFactory.CreateFruitFactory();//蘋果對象生產完成

 

使用時機:

  可以和簡單工廠互相替換,需要根據具體項目而定。二者各有優缺點,就原則來說,工廠方法模式更好。

 

優點:克服了簡單工廠違背開放封閉原則的缺點,又保持了封裝對象創建過程的優點。

缺點:產品和工廠類成對增加,增加額外開發量、工程複雜度、編譯速度。