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

2021-10-22 19:45:28 字數 2181 閱讀 9932

之前看到的兩個設計模式,都存在各自的缺陷,簡單工廠模式中,乙個工廠生產多個產品,根據客戶提供的產品名稱建立對應的產品例項;工廠方法設計模式,則在簡單工廠模式的工廠上,建立了許多個工廠類,根據客戶提供的產品名稱選擇可以生產對應產品的工廠進行生產。

然而,很多時候,乙個工廠生產的產品並不單一,而是生產一類產品,比如,乙個工廠,可以生產足球、籃球、排球等多種產品,把相關的產品歸納為乙個「產品族」,由同乙個工廠來生產,這就是抽象工廠模式。

抽象工廠模式,提供乙個建立一系列相關或相互依賴物件的介面,而無需指定他們具體的類。其抽象程度更高,每乙個具體工廠可以生產一組相關的具體產品物件。

其uml類圖如下:

可以看出,具體工廠a可以生產兩種產品,工廠b也可以生產兩種產品。在使用客戶端時,只需要宣告乙個抽象工廠abstractfactory和兩個抽象產品abstractproduct。

直接上個例子:

abstractfactory.h

#include

#include

using

namespace std;

//抽象產品類abstractball

class

abstractball

//抽象方法:

void

play()

;};//具體產品類basketball

class

basketball

:public abstractball

//具體實現方法

void

play()

};//具體產品類football

class

football

:public abstractball

//具體實現方法

void

play()

};//抽象產品類abstractshirt

class

abstractshirt

//抽象方法:

void

wearshirt()

;};//具體產品類basketballshirt

class

basketballshirt

:public abstractshirt

//具體實現方法

void

wearshirt()

};//具體產品類footballshirt

class

footballshirt

:public abstractshirt

//具體實現方法

void

wearshirt()

};//抽象工廠類

class

abstractfactory

;//具體工廠類basketballfactory

class

basketballfactory

:public abstractfactory

abstractball *

getball()

abstractshirt *

getshirt()

};//具體工廠類basketballfactory

class

footballfactory

:public abstractfactory

abstractball *

getball()

abstractshirt *

getshirt()

};

abstractfactory.cpp

#include

#include

"abstractfactory.h"

intmain()

抽象工廠模式中,如果需要新增加乙個系列的產品,比如足球系列,只需增加一族新的具體產品類(抽象和具體)並提供乙個對應的工廠類即可。但是,如果要在已有的產品族裡增加另乙個產品,比如除了需要籃球和籃球衣外,還想換雙籃球鞋,這時候該怎麼辦呢?是不是要去修改basketballfactory呢?由此,jungle總結了抽象工廠模式的特點:

優點:

缺點:

適用環境:

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

工廠類雖然快捷方便和易於擴充套件,但是每乙個具體工廠類只能生產一類產品。如果需要多組的產品類,則系統中就會存在大量的工廠類,會增加系統資源的消耗。抽象工廠模式就可以很好的解決這種問題。1.抽象工廠模式概述 抽象工廠模式為建立一組物件提供了一種解決方案。與工廠方法模式相比,抽象工廠模式中的具體工廠不只...

設計模式 4 抽象工廠模式

1.什麼是抽象工廠模式?1.什麼時候使用抽象工廠模式?系統的產品有多個產品族,而我們只需要消費其中某乙個產品族中的產品。什麼是產品族?以手機為例 3.如何實現抽象工廠模式?1 定義手機介面 定義 手機 介面 public inte ce phone 2 定義路由器介面 定義 路由器 介面 publi...

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

建立物件時不會對客戶暴露建立邏輯,並且通過使用乙個共同的介面來指向建立的物件。sept1 建立乙個公共介面,將要對外開放的方法在這裡定義。sept2 建立實現介面的類,用即實現對外開放的類的方法 sept3 建立工廠,提供乙個get方法,這個方法提供返回實現類的物件 建立選擇 sept4 使用,建立...