還記得前面的簡單工廠模式麼?咱們開了一個水果工廠FruitFactory
,生產三種水果Apple
,Pear
,Orange
。今天給你們講講工廠方法模式:java
老闆搞水果工廠賺了點小錢,準備擴大生產,每一個工廠生產一種水果,各司其職,而不是把全部的產品類型都放到一個工廠中。設計模式
既然有多工廠,那咱們和以前同樣,搞一個水果工廠類FruitFactory
,把它搞成接口類。app
import factory.Fruit; public interface FruitFactory { public Fruit getFruit(); }
水果類的定義仍是同樣,定義一個水果接口Fruit
:測試
public interface Fruit { public void process(); }
水果分別以下,我直接寫到一塊去了:ui
public class Apple implements Fruit { public void process() { System.out.println("I am an Apple"); } } public class Pear implements Fruit { public void process() { System.out.println("I am a Pear"); } } public class Orange implements Fruit { public void process() { System.out.println("I am an Orange"); } }
既然有多個工廠。那咱們分別定義多個工廠,對水果工廠類作不一樣的實現,分別生產蘋果,雪梨,橙子。設計
public class AppleFactory implements FruitFactory { public Fruit getFruit(){ return new Apple(); } } public class PearFactory implements FruitFactory { public Fruit getFruit(){ return new Pear(); } } public class OrangeFactory implements FruitFactory { public Fruit getFruit(){ return new Orange(); } }
測試代碼以下:code
public class FruitTest { public static void main(String[] args) { FruitFactory appleFactory = new AppleFactory(); Fruit apple = appleFactory.getFruit(); apple.process(); FruitFactory pearFactory = new PearFactory(); Fruit pear = pearFactory.getFruit(); pear.process(); } }
運行結果:blog
I am an Apple I am an Pear
上面的寫法,若是後續還有生產不一樣的水果,或者不一樣的水果工廠,相對容易拓展。總結一下,工廠方法模式一共有如下的角色:接口
getFruit()
來建立水果產品。那麼工廠方法模式,相對簡單工廠模式,有什麼區別呢?
工廠方法模式,一種工廠對應一種產品,各司其職,若是產品不少的話,方便分開維護,特別是那種建立產品比較複雜的場景,而產品類型又比較多,這樣就會顯得很臃腫。get
可是若是產品不多,並且建立過程相對簡單的時候,感受簡單工廠模式已經足夠,不須要特地爲了使用一種設計模式而使用它,過分設計會帶了不少沒必要要的麻煩。
【做者簡介】:
秦懷,公衆號【秦懷雜貨店】做者,技術之路不在一時,山高水長,縱使緩慢,馳而不息。這個世界但願一切都很快,更快,可是我但願本身能走好每一步,寫好每一篇文章,期待和大家一塊兒交流。