抽象工廠模式

抽象工廠模式

設計模式中的創建型模式
抽象工廠模式(Abstract Factory Pattern)隸屬于設計模式中的創建型模式,用于産品族的構建。抽象工廠模式(Abstract Factory Pattern)是圍繞一個超級工廠創建其他工廠。該超級工廠又稱為其他工廠的工廠。這種類型的設計模式屬于創建型模式,它提供了一種創建對象的最佳方式。[1]
    中文名:抽象工廠模式 外文名:Abstract Factory 适用領域: 所屬學科: 是指:當有多個抽象角色 根據:LSP原則 創建:多個産品族中的産品對象

原理

抽象工廠模式相對于工廠方法模式來說,就是工廠方法模式是針對一個産品系列的,而抽象工廠模式是針對多個産品系列的,即工廠方法模式是一個産品系列一個工廠類,而抽象工廠模式是多個産品系列一個工廠類。在抽象工廠模式中,客戶端不再負責對象的創建,而是把這個責任丢給了具體的工廠類,客戶端隻負責對對象的調用,從而明确了各個類的職責。并且當一系列相互關聯的産品被設計到一個工廠類裡後,客戶端的調用将會變得非常簡單,而且,如果要更換這一系列的産品,則隻需要更換一個工廠類即可。

分類

抽象工廠模式中存在四種角色,分别是抽象工廠角色,具體工廠角色,抽象産品角色,具體産品角色。n

抽象工廠角色:擔任這個角色的是工廠方法模式的核心,它是與應用系統商業邏輯無關的。n

具體工廠角色:這個角色直接在客戶端的調用下創建産品的實例。這個角色含有選擇合适的産品對象的邏輯,而這個邏輯是與應用系統的商業邏輯緊密相關的。n

抽象産品角色:擔任這個角色的類是工廠方法模式所創建的對象的父類,或它們共同擁有的接口。n

具體産品角色:抽象工廠模式所創建的任何産品對象都是某一個具體産品類的實例。這是客戶端最終需要的東西,其内部一定充滿了應用系統的商業邏輯。

功能

抽象工廠模式的一個主要功能是它能夠隔離要生成的具體産品類,由于這些類的實際類名部被隐藏在工廠内部,因此客戶端根本不需要關心如何對它們進行實例化的細節。每種設計模式都是針對特定問題的解決方案,而抽象工廠模式面臨的問題則是當涉及到有多個産品等級結構寸,如何更好地進行軟件體系結構的設計。

代碼舉例

假設我們有兩種産品接口Button和Border,每一種産品都支持多種系列,比如Mac系列和Windows系列。這樣每個系列的産品分别是MacButton,WinButton,MacBorder,WinBorder。為了可以在運行時刻創建一個系列的産品族,我們可以為每個系列的産品族創建一個工廠MacFactory和WinFactory。每個工廠都有兩個方法CreateButton和CreateBorder并返回對應的産品,可以将這兩個方法抽象成一個接口AbstractFactory。這樣在運行時刻我們可以選擇創建需要的産品系列。

優點

(1)分離了具體的類。客戶通過抽象接口操縱實例,産品的類名也在具體工廠的實現中被分離,它們不出現在客戶代碼中。n

(2)易于交換産品系列。一個具體工廠類隻在初始化時出現一次,這使得改變一個應用的具體工廠變得很容易,隻需改變具體的工廠即可使用不同的産品配置。n

(3)有利于産品的一緻性。當一個系列的産品對象被設計成一起工作時,一個應用一次隻能使用同一個系列中的對象,這一點很重要,而抽象工廠很容易實現這一點。n

缺點

難以支持新種類的産品。因為抽象工廠接口确定了可以被創建的産品集合,所以難以擴展抽象工廠以生産新種類的産品。

相關詞條

相關搜索

其它詞條