週末在家也沒事,以前對工廠經常使用模式瞭解有一些不夠深刻,恰好整理一下設計模式相關。共同理解和學習一下。設計模式
工廠方法模式一樣屬於類的建立型模式又被稱
爲多態工廠模式 。工廠方法模式的意義是定義一個建立
產品對象的工廠接口,將實際建立工做推遲到子類當中。
核心工廠類再也不負責產品的建立,這樣核心類成爲一個
抽象工廠角色,僅負責具體工廠子類必須實現的接口,
這樣進一步抽象化的好處是使得工廠方法模式可使系
統在不修改具體工廠角色的狀況下引進新的產品。app
1.抽象工廠(Creator)角色:工廠方法模式的核心,任何工廠類都必須實現這個接口。(下面代碼的ide
FruitFactory接口,任何工廠類都必須實現FruitFactory接口
)學習
2.具體工廠( Concrete Creator)角色:具體工廠類是抽象工廠的一個實現,負責實例化產品對象。(下面代碼中的ui
AppleFactory實例,用於具體負責實例化的產品對象。是實現抽象工廠的一個具體實現。
)spa
3.抽象(Product)角色:工廠方法模式所建立的全部對象的父類,它負責描述全部實例所共有的公共接口。(下面代碼中的設計
Fruit接口,負責抽象出全部實例的公共特性。
)3d
4.具體產品(Concrete Product)角色:工廠方法模式所建立的具體實例對象。(下面代碼中的code
Apple類,負責實現抽象接口的具體的實例對象。
)對象
package factorymethod; public class Apple implements Fruit { public void get(){ System.out.println("吃蘋果"); } }
package factorymethod; public class AppleFactory implements FruitFactory { public Fruit getFruit() { return new Apple(); } }
package factorymethod; public class Banana implements Fruit { public void get(){ System.out.println("吃香蕉"); } }
package factorymethod; public class BananaFactory implements FruitFactory { public Fruit getFruit() { return new Banana(); } }
package factorymethod; public interface Fruit { public void get(); }
package factorymethod; public interface FruitFactory { public Fruit getFruit(); }
package factorymethod; public class Pear implements Fruit { @Override public void get() { System.out.println("吃梨"); } }
package factorymethod; public class PearFactory implements FruitFactory { public Fruit getFruit() { return new Pear(); } }
package factorymethod; public class MainClass { public static void main(String[] args) { //AppleFactory FruitFactory ff = new AppleFactory(); Fruit apple = ff.getFruit(); apple.get(); FruitFactory ff2 = new BananaFactory(); Fruit banana = ff2.getFruit(); banana.get(); FruitFactory ff3 = new PearFactory(); Fruit pear = ff3.getFruit(); pear.get(); } }
工廠方法模式與簡單工廠模式在結構上的不一樣不是很明顯。工廠方
法類的核心是一個抽象工廠類,而簡單工廠模式把核心放在一個具
體類上。
工廠方法模式之因此有一個別名叫多態性工廠模式是由於具體工
廠類都有共同的接口,或者有共同的抽象父類。
當系統擴展須要添加新的產品對象時,僅僅須要添加一個具體對
象以及一個具體工廠對象,原有工廠對象不須要進行任何修改,也
不須要修改客戶端,很好的符合了「開放-封閉」原則。而簡單工廠
模式在添加新產品對象後不得不修改工廠方法,擴展性很差。
工廠方法模式退化後能夠演變成簡單工廠模式。