Java設計模式之抽象工廠模式

什么是抽象工廠模式

抽象工廠模式提供了 一種模式,可以將一組具有同一主題的單獨的工廠封裝起來。抽象工廠是一個父類工廠,可以創建其他工廠。所以我們可以叫它"工廠的工廠"。

抽象工廠模式例子

我們假設有A,B倆個廚房。每個廚房擁有的餐具和 食品都不一樣,比如刀子和蘋果,杯子和牛奶。

Class: Foodaholic  -> void eat(KitchenFactory)
Interface: Food -> String getFoodName() 
Interface: TableWare -> String getToolName()
Class: Apple -> String getFoodName()
Class: Milk -> String getFoodName()
Class: Knife -> String getToolName()
Class: Cup -> String getToolName()
Interface: KitchenFactory -> Food getFood(), Tableware getTableware()
Class: AKitchen: -> Food getFood(), Tableware getTableware()
Class: BKitchen -> Food getFood(), Tableware getTableware()

示例代碼

public class Foodaholic {
    public void eat(KitchenFactory kf) {
        System.out.println("A foodaholic is eating " + kf.getFood().getFoodName()
                + " with " + kf.getTableware().getToolName());
    }
    
    public static void main(String[] agrs) {
        Foodaholic f = new Foodaholic();
        KitchenFactory kf = new AKitchen();
        f.eat(kf);
    }

}

interface Food {
    public String getFoodName();
}

interface Tableware {
    public String getToolName();
}

interface KitchenFactory {
    public Food getFood();
    
    public Tableware getTableware();
}
class Apple implements Food {

    @Override
    public String getFoodName() {
        return "apple";
    }
}

class Knife implements Tableware {

    @Override
    public String getToolName() {
        return "knife";
    }
}

class AKitchen implements KitchenFactory {

    @Override
    public Food getFood() {
        return new Apple();
    }

    @Override
    public Tableware getTableware() {
        return new Knife();
    }   
}

運行結果:

抽象工廠模式.png

抽象工廠模式應用

產品分為幾個系列,產品的布局都是類似的,在一個系列中某個位置的產品,在另一個系列中一定有一個對應的產品。存在這樣的產品結構, 這幾個系列中同一位置的產品可能是互斥的,它們是針對不同客戶的解決方案,每個客戶都選其一。

工廠模式和抽象工廠模式區別

這里有倆個概念:

  • 產品等級結構:比如一個抽象類是食物,其子類有蘋果,牛奶等,那么抽象食物與具體食物名稱構成了一個產品等級結構。 食物抽象的父類,具體的食物名稱是其子類。
  • 產品族:產品族是指由同一個工廠生產的,位于不同產品等級結構中的一組產品。如AKitchen生產的蘋果,刀子, 蘋果屬于食物產品等級結構中,而刀子屬于餐具產品等級結構中。
    結論
    工廠方法模式:針對的是一個產品等級結構
    抽象工廠模式:針對的是多個產品等級結構
抽象工廠模式到此結束
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容