一、什麼是工廠方法模式?
工廠方法模式屬於類的創建型模式又被稱爲多態工廠模式。工廠方法模式的意義是定義一個創建產品對象的工廠接口,將實際創建工作推遲到子類當中。核心工廠類不在負責產品的創建,這樣核心類成爲一個抽象工廠角色,僅負責具體工廠子類必須實現的接口,這樣進一步抽象化的好處是使得工廠方法模式可以使系統在不修改具體工廠角色的情況下引進新的產品。
代碼實現:
首先複製上篇簡單工廠模式中的Fruit接口,Apple類,Banana類
(1)、創建FruitFactory接口:
package com.renxin.simplefactory;
public interface FruitFactory {
public Fruit getFruit();
}
(2)、創建AppleFactory類
package com.renxin.simplefactory;
public class AppleFactory implements FruitFactory {
public Fruit getFruit() {
return new Apple();
}
}
(3)、創建BananaFactory類
package com.renxin.simplefactory;
public class BananaFactory implements FruitFactory {
public Fruit getFruit() {
return new Banana();
}
}
(4)、創建測試類MainClass
package com.renxin.simplefactory;
public class MainClass {
public static void main(String[] args) {
//獲得AppleFactory
FruitFactory ff = new AppleFactory();
//通過AppleFactory來獲得Apple實例對象
Fruit apple = ff.getFruit();
apple.get();
//獲得BananaFactory
FruitFactory fff = new BananaFactory();
//通過BananaFactory來獲得Banana實例對象
Fruit banana = fff.getFruit();
banana.get();
}
}
二、模式中包含的角色及其職責
1、抽象工廠(Creator)角色(也就是上面的FruitFactory接口):工廠方法模式的核心。任何工廠類都必須實現這個接口。
2、具體工廠(Concrete Creator)角色(也就是上面的AppleFactory和BananaFactory):具體工廠類是抽象工廠的一個實現,負責實例化產品對象。
3、抽象(Product)角色(也就是上一篇簡單工廠模式中的Fruit接口):工廠方法模式所創建的所有對象的父類,他負責描述所有實例所共有的公共接口。
4、具體產品(Concrete Product)角色(也就是上一篇簡單工廠模式中的Apple和Banana):工廠方法模式所創建的具體實例對象。
三、工廠方法模式和簡單工廠模式比較
工廠方法模式與簡單工廠模式在結構上的不同不是很明顯。工廠方法類的核心是一個抽象工廠類,而簡單工廠模式是吧核心放在一個具體的類上。
工廠方法模式之所以有一個別名叫多態性工廠模式是因爲具體工廠類都有共同的接口,或者有共同的抽象父類。
當系統擴展需要添加新的產品對象的時候,僅僅需要添加一個具體對象以及一個具體工廠對象,原有工廠對象不需要進行任何修改,也不需要修改客戶端,很好的符合了“開放–封閉”原則。而簡單工廠模式在添加新產品對象後不得不修改工廠方法,擴展性不好。
工廠方法模式退化後可以演變成簡單工廠模式。