定義:工廠方法模式是對簡單工廠模式進一步的抽象化,好處是可以使系統不修改原來程式碼的情況下引進新的產品,即滿足開閉原則。建立一個介面用於物件實例化,讓子類別決定哪個類別被實例化,從而可以將類別的實例化過程延遲到子類別中。
抽象工廠(AbstractFactory):提供了創建產品的接口,調用方通過它訪問具體工廠的工廠方法來創建產品
具體工廠(ConcreteFactory):實現了抽象工廠定義的方法,完成具體產品的創建
抽象產品(Product):定義了產品的規範,描述產品的主要特徵和性能
具體產品(ConcreteProduct):實現了抽象產品的定義的方法,有具體工廠來創建產品,具體工廠和具體產品一一對應
工廠方法模式實作:
/** * 抽象工厂:提供具体工厂的共有方法 */ public interface Product { public void show(); } public class ConcreteProduct1 implements Product { @Override public void show() { System.out.println("具体产品1展示..."); } } public class ConcreateProduct2 implements Product { @Override public void show() { System.out.println("具体产品2展示..."); } } /** * 抽象工厂 */ public interface AbstractFactory { public Product createProduct(); } /** * 具体工厂1产生具体产品1 */ public class ConcreteFactory1 implements AbstractFactory { @Override public Product createProduct() { ConcreteProduct1 concreteProduct1 = new ConcreteProduct1(); System.out.println("具体工厂1创建具体产品1..."); return concreteProduct1; } public class ConcreteFactory2 implements AbstractFactory { @Override public Product createProduct() { System.out.println("具体工厂2产生具体产品2..."); return new ConcreateProduct2(); } }
呼叫方法:
//获取具体产品1 Product product = new ConcreteFactory1().createProduct(); product.show(); Product product1 = new ConcreteFactory2().createProduct(); product1.show();
使用步驟:
建立抽象產品類,定義產品的公共方法
建立特定產品類別(實作抽象產品介面),定義產生的具體產品
#建立抽象工廠類,定義特定工廠的公共介面
建立特定工廠類,定義建立對應特定產品實例的方法
#呼叫方呼叫特定的工廠類別的方法,從而創建不同特定產品的實例
解決問題:解決了簡單工廠類別新增產品需要修改工廠類別的方法邏輯問題,也就是為別開閉原則。
將具體的產品創建退出到工廠類別的子類別(具體工廠),此時工廠類別不再負責所有產品的創建,而是給出具體工廠必須實現的接口,這樣工廠方法在在增加新的產品的時候,就不需要修改工廠類的邏輯,而是增加了新的工廠子類,符合開閉原則。
優點:
彈性強,對於新產品的創建,只需要多寫一個對應的工廠類別
使用者只需要指導工廠的名稱就可以獲得所要的產品,不需要指導產品具體創建過程
缺點:
類別的數量容易過多,增加了複雜度
每個工廠只能生產一種產品,次弊端可以使用抽象工廠模式解決
客戶只專注於創建產品的工廠名,不需要知道特定的產品名稱
以上是怎麼用Java程式碼實作工廠方法模式的詳細內容。更多資訊請關注PHP中文網其他相關文章!