解釋 : 像是膠囊咖啡機的膠囊咖啡
傳統的咖啡機可能只有幾種固定的口味,如義式咖啡、美式咖啡,如果要牛奶還要另外加。
膠囊咖啡機將口味改放到膠囊裡面,當你使用機器時,只要放入不同的口味膠囊,就可以泡出不同口味的咖啡,甚至有奶茶、巧克力等等口味可以選。
也就是如同膠囊咖啡機,會產生什麼飲品都是藉由你放入的膠囊決定。
目的
定義可生成的物件的介面,讓子類別該具現哪一種類別的物件。將具現化程序交付給子類別去處置。
別名
Virtual constructor (虛擬建構式)
範例
建立一個 IProduct 介面,用來建立 ConcreteProduct
目前建立兩個 ConcreteProduct : Coffee 跟 Milk
接著建立 Creator 裡面定義回傳的 Product , GetDrink 即 factory method
建立膠囊
建立機器 :
當你需要咖啡時,只要放入膠囊,然後執行 GetDrink,你就能得到咖啡 :
結構
參與者
- Product – FactoryMethod 所造的物件介面
- ConcreteProduct – 具體實作的 Product
- Creator – 宣告 factory method,會回傳 Product 型別之物件
- ConcreteCreator – 複寫 factory method 以傳回 ConcreteProduct
替子類別預留掛勾(hook)
如同上面的膠囊,你可能只是訂出膠囊的規格,但裡面要生產的口味還沒決定。
例如你跟另一個協作系統已經確定如何存取互動,但是還無法明確指出欲生成的類別時,可以只建立 IProduct,待確定之後才添加 ConcreteProduct