工廠方法模式 建立型 設計模式(三)
阿新 • • 發佈:2018-11-12
工廠方法模式是簡單工廠模式的進一步抽象
工廠方法模式既保持了簡單工廠模式的優點,又克服了他的缺點
如不清楚簡單工廠模式,可以檢視前一篇
他是怎麼做到的呢?那就是:
核心的工廠角色,不再是具體的工廠,也就是不再負責所有具體產品的建立,進一步轉變為抽象角色。
他僅僅提供具體工廠子類必須實現的介面 ,不再關心應該例項化哪個具體的產品類
具體建立的工作的細節全部交給子類工廠去做
簡言之,
從一個類包打天下(簡單工廠模式),轉換為兄弟姐妹一起上(工廠方法)
別名:虛構造器
而是存在工廠的體系結構
Creator作為建立工廠的抽象角色,提供了建立協議,也就是一個方法,約定了我們將要建立什麼範疇的產品
ConcreteCreator1和ConcreteCreator2 是具體的工廠,他們都實現Creator,針對不同的產品有不同的工廠
也就是
產品等級結構是什麼樣的,就有一個類似結構的工廠等級結構
對應著的工廠建立對應著的產品
就像上圖中那樣,兩個圈中的層級結構是對稱的,一 一對應的
Creator對應Product
ConcreteCreator1對應ConcreteProduct1
ConcreteCreator2對應ConcreteProduct2
......
示例程式碼
還是以水果的為例
Fruit Apple Orange與簡單工廠模式中一樣
此時,不再是一個水果店賣所有的水果,而是不同的水果店銷售不同的水果
所以對應水果這種產品的等級結構,也有對應的工廠等級結構
Factory以及 AppleFactory和 OrangeFactory
Fruit Apple 和Orange與簡單工廠中的程式碼相同,請參見上一篇文章,不再贅述
意圖
定義一個用於建立物件的介面,讓子類決定例項化哪一個類 工廠方法模式使一個類的例項化,延時到其子類(就是在說,子類負責具體產品類的例項化)結構
抽象產品Product 產品抽象角色,工廠建立具體的物件的超類或共同介面 具體產品ConcreteProduct 實現了抽象產品Product,ConcreteProduct1 和ConcreteProduct2為具體的產品 抽象工廠Creator 工廠模式的核心,與應用程式無關,所有的工廠都需要實現抽象工廠角色 具體工廠ConcreteCreator 實現了工廠介面的具體的Java類,用於產生具體的產品 工廠模式相對於簡單工廠模式,產品側的結構形式不變 而對於工廠,變化很清晰明顯 不再是單一的Java類承擔所有的物件建立職責示例程式碼
還是以水果的為例
Fruit Apple Orange與簡單工廠模式中一樣
此時,不再是一個水果店賣所有的水果,而是不同的水果店銷售不同的水果
所以對應水果這種產品的等級結構,也有對應的工廠等級結構
Factory以及 AppleFactory和 OrangeFactory
Fruit Apple 和Orange與簡單工廠中的程式碼相同,請參見上一篇文章,不再贅述
package factory; /** * Created by noteless on 2018/10/9. * Description: */ public interface Factory { Fruit create(); }
package factory; /** * Created by noteless on 2018/10/9. * Description: */ public class AppleFactory implements Factory { @Override public Fruit create() { return new Apple(); } }
package factory; /** * Created by noteless on 2018/10/9. * Description: */ public class OrangeFactory implements Factory { @Override public Fruit create() { return new Orange(); } }
測試程式碼 工廠方法模式的特點就是平行的等級結構 ,也就是工廠與產品有相對應的層級結構 而不是像簡單工廠模式中那樣,一個全能類包攬所有建立邏輯