工廠方法模式是類的建立模式,又叫作虛擬構造子(Virtual Constructor)模式或者多態性工廠(Polymorphic Factory)模式。 工廠方法模式的用意是定義一個建立產品對象的工廠接口,將實際建立工做推遲到子類中。併發
或者說引入工廠模式的目的就是咱們須要多個工廠,可是每一個工廠內部又要劃分狀況,若是隻用一個工廠的話,會產生多種複合的狀況。分佈式
好比說咱們有兩個工廠,每一個工廠有3種狀況,若是用簡單工廠模式,要分爲 3 * 2 = 6
種狀況,因此能夠用工廠方法模式解決。ide
在簡單工廠中,建立對象的是另外一個類,而在工廠方法中,是由大工廠的子類(或者實現類)來建立對象。高併發
即上面有一個大工廠,下面是分類的工廠。測試
案例,模擬須要生成中國食物A,中國食物B,美國食物A,美國食物B。
代碼邏輯結構圖:spa
基本結構圖:code
先給出這些食物(Product
):orm
public interface Food { } public class AmericanFoodA implements Food { } public class AmericanFoodB implements Food { } public class ChineseFoodA implements Food { } public class ChineseFoodB implements Food { }
而後是抽象工廠:對象
public interface FoodFactory { Food makeFood(String name); }
而後就是兩個子工廠:blog
public class ChineseFoodFactory implements FoodFactory { @Override public Food makeFood(String name) { if (name.equals("A")) { return new ChineseFoodA(); } else if (name.equals("B")) { return new ChineseFoodB(); } else { return null; } } } public class AmericanFoodFactory implements FoodFactory { @Override public Food makeFood(String name) { if (name.equals("A")) { return new AmericanFoodA(); } else if (name.equals("B")) { return new AmericanFoodB(); } else { return null; } } }
最後測試:
public class MyTest { public static void main(String[] args) { // 先選擇一個具體的工廠 FoodFactory factory = new ChineseFoodFactory(); // 由第一步的工廠產生具體的對象,不一樣的工廠造出不同的對象 Food food = factory.makeFood("A"); // chineseFood * A } }
工廠方法模式和簡單工廠模式在結構上的不一樣很明顯。
工廠方法模式的核心是一個抽象工廠類,而簡單工廠模式把核心放在一個具體類上。
工廠方法模式退化後能夠變得很像簡單工廠模式。設想若是很是肯定一個系統只須要一個具體工廠類,那麼不妨把抽象工廠類合併到具體工廠類中去。因爲只有一個具體工廠類,因此不妨將工廠方法改成靜態方法,這時候就獲得了簡單工廠模式。
免費Java高級資料須要本身領取,涵蓋了Java、Redis、MongoDB、MySQL、Zookeeper、Spring Cloud、Dubbo高併發分佈式等教程,一共30G。
傳送門:https://mp.weixin.qq.com/s/JzddfH-7yNudmkjT0IRL8Q