設計模式:學習筆記(6)——抽象工廠模式

設計模式:學習筆記(6)——抽象工廠模式

抽象工廠模式

  在工廠方法模式中具體工廠負責生產具體的產品,每一個具體工廠都對應一種具體產品,工廠方法也具有唯一性,一般情況下,一個具體工廠只有一個工廠方法或者一組重載的工廠方法。但是有時候我們需要一個工廠可以提供多個產品對象,而不是單一的產品對象。此時我們需要使用抽象工廠模式。

  抽象工廠模式與工廠方法模式最大的區別在於,工廠方法模式針對同一產品“大類”,而抽象工廠模式可以生產多個產品“大類”。

說明:在這裏呢,我們可以理解一個“大類”爲一個抽象產品接口

模式定義

  抽象工廠模式:爲創建一組相關或相互依賴的對象提供一個接口,而且無須指定它們的具體類

  這個概念依然抽象難懂,但是如果你已經閱讀了工廠(方法)模式,那我們直接看類圖即可更加容易理解。

  

  抽象工廠模式中的角色與工廠方法相同,也是4個角色:

  • 抽象工廠角色
  • 具體工廠角色
  • 抽象產品角色
  • 具體產品角色

模式分析

優缺點

  抽象工廠模式的主要優點依然是隔離了具體類的生成,使得客戶並不需要知道什麼被創建,而且每次可以通過具體工廠類創建多個“大類”的對象,增加大類和大類對象比較方便,但是還是需要修改抽象工廠和具體工廠的代碼,違反了開閉原則。

模式應用

  在很多軟件系統中需要更換界面主題,要求界面中的按鈕、文本框、背景色等一起發生改變時,可以使用抽象工廠模式進行設計。

 

實例

  如下是一個抽象工廠模式的實例,現在抽象工廠可以生成多個產品“大類”

interface AbstractFactory{
    Phone createPhone(String param);
    Mask createMask(String param);
}

class SuperFactory implements AbstractFactory{

    @Override
    public Phone createPhone(String param) {
        return new iPhone();
    }

    @Override
    public Mask createMask(String param) {
        return new N95();
    }
}

interface Phone{

}

class iPhone implements Phone{

}

interface Mask{

}

class N95 implements Mask{

}

  

參考資料

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章