設計模式(五)抽象工廠模式

2021-09-08 05:16:21 字數 2236 閱讀 5315

1.抽象工廠模式定義

抽象工廠模式可以說是是工廠方法模式的公升級版,當需要建立的產品有多個產品線(產品族)時使用抽象工廠模式是比較好的選擇。那什麼是多個產品線呢?拿我們在簡單工廠模式和工廠方法模式中學習的生產電腦的例子來舉例,我們一直都是生產聯想和惠普的電腦,但是電腦也有多個產品線:台式電腦、筆記本和平板等等,聯想和惠普都在生產這些不同產品線上的電腦,使用工廠方法模式已經滿足不了需求,這一篇文章我們就用抽象工廠模式來解決這一問題。

2.抽象工廠模式簡單實現

聯想和惠普生產的電腦分為了兩個產品線,乙個台式電腦,乙個是筆記本。為了解決增加產品線的問題,我們用抽象工廠模式來進行實現。

①抽象產品

首先定義抽象產品類:

public

abstract

class

desktopcomputer

public

abstract

class

notebookcomputer

兩個抽象產品類分別為desktopcomputer和notebookcomputer ,用來定義兩個產品線:台式電腦和筆記本。它們都定義了start方法,用來啟動電腦。

②具體產品

具體產品為聯想和惠普旗下的台式電腦和筆記本,如下所示。

public

class

lenovodesktopcomputer extends desktopcomputer

}public

class

hpdesktopcomputer extends desktopcomputer

}public

class

lenovonotebookcomputer extends notebookcomputer

}public

class

hpnotebookcomputer extends notebookcomputer

③抽象工廠接著建立生產電腦的抽象工廠,如下所示,

public

abstract

class

compute***ctory

定義了兩個方法,分別用來生產台式電腦和膝上型電腦。

④具體工廠

定義聯想和惠普工廠:

public

class

lenovofactory extends compute***ctory

@override

public

notebookcomputer createnotebookcomputer()

}public

class

hpfactory extends compute***ctory

@override

public

notebookcomputer createnotebookcomputer()

}

聯想工廠和惠普工廠用來生產台式電腦和筆記本這兩個不同產品線的電腦。

⑤客戶端呼叫

最後編寫客戶端:

public

class

client

}

分別用lenovofactory和hpfactory生產台式和膝上型電腦,並呼叫start方法啟動它們。

執行結果為:

聯想台式電腦啟動

聯想膝上型電腦啟動

惠普台式電腦啟動

惠普膝上型電腦啟動

接下來給出這個例子的uml圖,更便於理解,如下所示。

3.抽象工廠模式的優缺點

優點

具體類的建立例項過程與客戶端分離,客戶端通過工廠的抽象介面操縱例項,客戶端並不知道具體的實現是誰。

缺點

如果增加新的產品族則也需要修改抽象工廠和所有的具體工廠。

抽象工廠模式的使用場景

抽象工廠模式與工廠方法模式最大的區別:抽象工廠中每個工廠可以建立多種類的產品;而工廠方法每個工廠只能建立一類

設計模式(五) 抽象工廠模式

在設計模式 三 工廠方法模式和設計模式 四 jdk中的那些工廠方法中介紹了工廠方法模式。本文將介紹另外一種工廠模式 抽象工廠模式。在介紹了簡單工廠模式和工廠方法模式之後,相信很多人對工廠模式 如果單獨提到工廠模式,即包括簡單工廠模式 工廠方法模式及本文即將介紹的抽象工廠模式 的思想都有了一定的理解。...

設計模式(五) 抽象工廠模式

為建立一組相關或者是相互依賴的物件提供乙個介面,而不需要指定它們的具體類。乙個物件族有相同的約束時可以使用抽象工廠模式。在工廠方法模式中,我們的具體建立者每次使用都只能建立乙個同型別的物件,假如我們現在需要的是多個不同型別的物件,工廠方法就滿足不了需求了。這時我們可以把多個工廠方法組合到乙個類,這就...

設計模式(五) 抽象工廠模式

一 抽象工廠模式基本介紹 1 抽象工廠模式 定義了乙個inte ce用於建立相關或有依賴關係的物件簇,而無需指明具體的類 2 抽象工廠模式可以將簡單工廠模式和工廠方法模式進行整合 3 從設計層面看,抽象工廠模式就是對簡單工廠模式的改進 或者稱為進一步的抽象 4 將工廠抽象為兩層,absfactory...