3 設計模式 抽象工廠模式

2021-08-19 06:42:38 字數 2273 閱讀 3919

以下內容摘自

在此權作為筆記

上一章我們分析了簡單工廠模式與工廠方法模式,這一章我們來**一下抽象工廠模式。先看菜鳥教程上給的定義。

主要解決:主要解決介面選擇的問題。

何時使用:系統的產品有多於乙個的產品族,而系統只消費其中某一族的產品。

如何解決:在乙個產品族裡面,定義多個產品。

關鍵**:在乙個工廠裡聚合多個同類產品。

應用例項:工作了,為了參加一些聚會,肯定有兩套或多套衣服吧,比如說有商務裝(成套,一系列具體產品)、時尚裝(成套,一系列具體產品),甚至對於乙個家庭來說,可能有商務**、商務**、時尚**、時尚**,這些也都是成套的,即一系列具體產品。假設一種情況(現實中是不存在的,要不然,沒法進入共產主義了,但有利於說明抽象工廠模式),在您的家中,某乙個衣櫃(具體工廠)只能存放某一種這樣的衣服(成套,一系列具體產品),每次拿這種成套的衣服時也自然要從這個衣櫃中取出了。用 oo 的思想去理解,所有的衣櫃(具體工廠)都是衣櫃類的(抽象工廠)某乙個,而每一件成套的衣服又包括具體的上衣(某一具體產品),褲子(某一具體產品),這些具體的上衣其實也都是上衣(抽象產品),具體的褲子也都是褲子(另乙個抽象產品)。

優點:當乙個產品族中的多個物件被設計成一起工作時,它能保證客戶端始終只使用同乙個產品族中的物件。

缺點:產品族擴充套件非常困難,要增加乙個系列的某一產品,既要在抽象的 creator 裡加**,又要在具體的裡面加**。

使用場景: 1、qq 換**,一整套一起換。 2、生成不同作業系統的程式。

注意事項:產品族難擴充套件,產品等級易擴充套件。

我們現在有這樣乙個場景,已知地產商蓋樓房,房子存在室廳區別,如一室一廳,二室二廳,三室三廳,2室0廳等。

public

inte***ce

room

public

class

oneroom

implements

room

}

public

inte***ce

livingroom

public

class

onelivingroom

implements

livingroom

}

public

inte***ce

homeabstractfactory

public

class

roomfactory

implements

homeabstractfactory

if ("one".equalsignorecase(roomtype))

return

null;

}@override

public livingroom getlivingroom(string livingtype)

}

public

class

livingroomfactory

implements

homeabstractfactory

@override

public livingroom getlivingroom(string livingtype)

if ("one".equalsignorecase(livingtype))

return

null;

}}

public

class homefactoryproducer

if ("living".equalsignorecase(type))

return

null;

}}

public

class abstractfactorypatterndemo

}

在這,我們可以發現一點問題,如抽象工廠模式和簡單工廠模式與工廠方法模式有很大的相似之處,同時我們也會發現,如果要新增新的產品,工廠實現類就需要修改。在這裡,我們可以通過上一章工廠方法模式中的方法來解決——既給每乙個產品建立相對應的工廠類

工廠模式:

抽象工廠模式:

區別:

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

工廠方法模式中工廠只負責同類產品的生產。比如電視機工廠不應該生產汽車。然而現實生活中有很多綜合型的工廠,比如有些電視工廠不僅生產電視機,還會生產與之配套的機頂盒。那麼抽象工廠模式隨之誕生,這種模式將考慮多種型別產品的生產。我們總結下 工廠方法模式只考慮成產同一等級級的產品抽象方法模式考慮生產多等級的...

設計模式3 抽象工廠模式

抽象工廠簡單地說是工廠的工廠,抽象工廠可以建立具體工廠,由具體工廠來產生具體產品。汽車椅子類 public inte ce chair class chaira implements chair class chairb implements chair 汽車發動機類 public inte ce ...

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

使用抽象工廠模式完成披薩案例 是乙個抽象工廠模式的抽象層 public inte ce absfactory public class bjfactory implements absfactory else if ordertype.equals pepper return pizza publi...