設計模式 C 設計模式 抽象工廠模式

2021-10-06 08:13:06 字數 3373 閱讀 7893

【設計模式】物件導向設計七大原則

【設計模式】設計模式概念和分類

【設計模式】c#設計模式:單例模式

【設計模式】c#設計模式:工廠方法模式

【設計模式】c#設計模式:抽象工廠模式

【設計模式】c#設計模式:建造者模式

【設計模式】c#設計模式:原型模式

抽象工廠模式包含如下角色:

• abstractfactory:抽象工廠

• concretefactory:具體工廠

• abstractproduct:抽象產品

• product:具體產品

抽象工廠模式是所有形式的工廠模式中最為抽象和最具一般性的一種形態。

抽象工廠模式與工廠方法模式最大的區別在於,工廠方法模式針對的是乙個產品等級結構,而抽象工廠模式則需要面對多個產品等級結構,乙個工廠等級結構可以負責多個不同產品等級結構中的產品物件的建立 。當乙個工廠等級結構可以建立出分屬於不同產品等級結構的乙個產品族中的所有物件時,抽象工廠模式比工廠方法模式更為簡單、有效率。

public

enum phonebrand

///

/// 手機抽象產品

///

public

class

mobilephone

public

virtual

void

telephone()

}///

/// 手機具體產品

///

public

class

phonehuawei

:mobilephone

}public

class

phoneoppo

:mobilephone

}///

/// 電腦抽象產品

///

public

class

computer

}public

class

computerhuawei

:computer

}public

class

computeroppo

:computer

}///

/// 抽象生產工廠

///

public

abstract

class

productfoundries

///

/// huawei生產工廠

///

public

class

foundrieshuawei

:productfoundries

public

override

computer

computerproduct()

}///

/// oppo生產工廠

///

public

class

foundriesoppo

:productfoundries

public

override

computer

computerproduct()

}///

/// 工廠使用案列

///

public

class

employ

///

/// 產品生產訂單

///

public

void

productionorder

(list phonebrands)

mobile = foundries.

phoneproduct()

; mobile.

sendmessage()

;// 生產手機傳送簡訊

computer = foundries.

computerproduct()

; computer.

playgame()

;// 生產電腦打遊戲

} phonebrands.

clear()

; phonebrands =

null;}

}

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

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

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

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

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

在以下情況下可以使用抽象工廠模式:

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

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

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

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

「開閉原則」要求系統對擴充套件開放,對修改封閉,通過擴充套件達到增強其功能的目的。對於涉及到多個產品族與多個產品等級結構的系統,其功能增強包括兩方面:

(1) 增加產品族:對於增加新的產品族,工廠方法模式很好的支援了「開閉原則」,對於新增加的產品族,只需要對應增加乙個新的具體工廠即可,對已有**無須做任何修改。

(2) 增加新的產品等級結構:對於增加新的產品等級結構,需要修改所有的工廠角色,包括抽象工廠類,在所有的工廠類中都需要增加生產新產品的方法,不能很好地支援「開閉原則」。

抽象工廠模式的這種性質稱為「開閉原則」的傾斜性,抽象工廠模式以一種傾斜的方式支援增加新的產品,它為新產品族的增加提供方便,但不能為新的產品等級結構的增加提供這樣的方便。

當抽象工廠模式中每乙個具體工廠類只建立乙個產品物件,也就是只存在乙個產品等級結構時,抽象工廠模式退化成工廠方法模式;當工廠方法模式中抽象工廠與具體工廠合併,提供乙個統一的工廠來建立產品物件,並將建立物件的工廠方法設計為靜態方法時,工廠方法模式退化成簡單工廠模式。

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

good 定義了乙個建立一系列相關或相互依賴的介面,而無需指定它們的具體類。用於交換產品系列,如access sql server 產品的具體類名被具體工廠的實現分離 例 include include include using namespace std 使用者抽象介面 class iuser ...

C 設計模式 抽象工廠模式

為建立一組相關或相互依賴的物件提供乙個介面,而且無需指定他們的具體類。抽象工廠模式是所有形態的工廠模式中最為抽象和最具一般性的一種形態。抽象工廠模式是指當有多個抽象角色時,使用的一種工廠模式。抽象工廠模式可以向客戶端提供乙個介面,使客戶端在不必指定產品的具體的情況下,建立多個產品族中的產品物件。應用...

C 設計模式 抽象工廠模式

問題描述 之前講到了c 設計模式 工廠方法模式,我們可能會想到,後期產品會越來越多了,建立的工廠也會越來越多,工廠進行了增長,工廠變的凌亂而難於管理 由於工廠方法模式建立的物件都是繼承於product的,所以工廠方法模式中,每個工廠只能建立單一種類的產品,當需要生產一種全新的產品 不繼承自produ...