結合案例寫出工廠方法模式實例

1、基本概念

工廠方法模式是類的建立模式,又叫作虛擬構造子(Virtual Constructor)模式或者多態性工廠(Polymorphic Factory)模式。 工廠方法模式的用意是定義一個建立產品對象的工廠接口,將實際建立工做推遲到子類中。併發

或者說引入工廠模式的目的就是咱們須要多個工廠,可是每一個工廠內部又要劃分狀況,若是隻用一個工廠的話,會產生多種複合的狀況。分佈式

好比說咱們有兩個工廠,每一個工廠有3種狀況,若是用簡單工廠模式,要分爲 3 * 2 = 6種狀況,因此能夠用工廠方法模式解決。ide

 

2、結構

在簡單工廠中,建立對象的是另外一個類,而在工廠方法中,是由大工廠的子類(或者實現類)來建立對象。高併發

即上面有一個大工廠,下面是分類的工廠。測試

 

3、案例

案例,模擬須要生成中國食物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
    }
}

 

4、總結

工廠方法模式和簡單工廠模式在結構上的不一樣很明顯。

工廠方法模式的核心是一個抽象工廠類,而簡單工廠模式把核心放在一個具體類上。

工廠方法模式退化後能夠變得很像簡單工廠模式。設想若是很是肯定一個系統只須要一個具體工廠類,那麼不妨把抽象工廠類合併到具體工廠類中去。因爲只有一個具體工廠類,因此不妨將工廠方法改成靜態方法,這時候就獲得了簡單工廠模式。

 

免費Java高級資料須要本身領取,涵蓋了Java、Redis、MongoDB、MySQL、Zookeeper、Spring Cloud、Dubbo高併發分佈式等教程,一共30G。
傳送門:https://mp.weixin.qq.com/s/JzddfH-7yNudmkjT0IRL8Q
相關文章
相關標籤/搜索