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

2021-07-22 21:44:01 字數 2649 閱讀 4774

上兩篇講解了簡單工廠模式和工廠方法模式,下面講解工廠模式的最後乙個抽象工廠模式

隨著客戶的要求越來越高,寶馬車需要不同配置的空調和發動機等配件。於是這個工廠開始生產空調和發動機,用來組裝汽車。這時候工廠有兩個系列的產品:空調和發動機。寶馬320li系列配置a型號空調和a型號發動機,寶馬520li系列配置b型號空調和b型號發動機。

抽象工廠模式(abstract factory pattern):提供乙個建立一系列相關或相互依賴物件的介面,而無須指定它們具體的類。抽象工廠模式又稱為kit模式,屬於物件建立型模式。抽象工廠模式是工廠方法模式的公升級版本,他用來建立一組相關或者相互依賴的物件。

上面我們有兩種產品:空調aircondition和引擎engine,它們都有不同的型號,抽象工廠類abstractfactorybmw定義了需要生成空調和引擎,具體的工廠類按需生產相應的空調和引擎產品,下面是**:

產品類:

//發動機以及型號

public

inte***ce

engine

public

class

enginea

implements

engine

}public

class

engineb

implements

engine

}//空調以及型號

public

inte***ce

aircondition

public

class

airconditiona

implements

aircondition

}public

class

airconditionb

implements

aircondition

}

工廠類:

//建立工廠的介面

public

inte***ce

abstractfactorybmw

//為寶馬320系列生產配件

public

class

factorybmw320li

implements

abstractfactorybmw

@override

public aircondition createaircondition()

}//寶馬520系列

public

class

factorybmw520li

implements

abstractfactorybmw

@override

public aircondition createaircondition()

}

客戶:

public

class

customer

}

abstractfactory:抽象工廠

concretefactory:具體工廠

abstractproduct:抽象產品(多個)

product:具體產品

抽象工廠模式隔離了具體類的生成,使得客戶並不需要知道什麼被建立。由於這種隔離,更換乙個具體工廠就變得相對容易。所有的具體工廠都實現了抽象工廠中定義的那些公共介面,因此只需改變具體工廠的例項,就可以在某種程度上改變整個軟體系統的行為。另外,應用抽象工廠模式可以實現高內聚低耦合的設計目的,因此抽象工廠模式得到了廣泛的應用。

當乙個產品族中的多個物件被設計成一起工作時,它能夠保證客戶端始終只使用同乙個產品族中的物件。這對一些需要根據當前環境來決定其行為的軟體系統來說,是一種非常實用的設計模式。

增加新的具體工廠和產品族很方便,無須修改已有系統,符合「開閉原則」。

在新增新的產品物件時,難以擴充套件抽象工廠來生產新種類的產品,這是因為在抽象工廠角色中規定了所有可能被建立的產品集合,要支援新種類的產品就意味著要對該介面進行擴充套件,而這將涉及到對抽象工廠角色及其所有子類的修改,顯然會帶來較大的不便。

開閉原則的傾斜性(增加新的工廠和產品族容易,增加新的產品等級結構麻煩)。

乙個系統不應當依賴於產品類例項如何被建立、組合和表達的細節,這對於所有型別的工廠模式都是重要的。

系統中有多於乙個的產品族,而每次只使用其中某一產品族。

屬於同乙個產品族的產品將在一起使用,這一約束必須在系統的設計中體現出來。

系統提供乙個產品類的庫,所有的產品以同樣的介面出現,從而使客戶端不依賴於具體實現。

無論是簡單工廠模式,工廠方法模式,還是抽象工廠模式,他們都屬於工廠模式,在形式和特點上也是極為相似的,他們的最終目的都是為了解耦。在使用時,我們不必去在意這個模式到底工廠方法模式還是抽象工廠模式,因為他們之間的演變常常是令人琢磨不透的。經常你會發現,明明使用的工廠方法模式,當新需求來臨,稍加修改,加入了乙個新方法後,由於類中的產品構成了不同等級結構中的產品族,它就變成抽象工廠模式了;而對於抽象工廠模式,當減少乙個方法使的提供的產品不再構成產品族之後,它就演變成了工廠方法模式。

所以,在使用工廠模式時,只需要關心降低耦合度的目的是否達到了。

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

以肯德基麥當勞為例 解析抽象的工廠模式,以下是 的實現 第乙個介面 hb 建立漢堡的工廠 package com.factory.hb hb 漢堡 author lx public inte ce factoryhb 第乙個實現類 肯德基的漢堡 package com.imple.hb import...

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

一 什麼是抽象工廠模式 抽象工廠模式是所有形態的工廠模式中最為抽象和最具一般性的。抽象工廠模式可以向客戶端提供乙個藉口,使得客戶端在不必指定產品的具體型別的情況下,能夠建立多個產品族的產品物件。fruit介面 public inte ce fruit public abstract fruit ba...

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

抽象工廠模式 產品類 發動機以及型號 public inte ce engine public class enginea extends engine public class enginebextends engine 空調以及型號 public inte ce aircondition pub...