抽象工廠,工廠方法,簡單工廠對比

2021-10-01 23:27:15 字數 2087 閱讀 2682

抽象工廠,工廠方法,簡單工廠對比

建立型類模式將乙個物件的部分建立工作延遲到子類,而建立型物件模式則將它延遲到另乙個物件中。

建立型:使得動態建立物件更靈活

結構型:新增第三方類降低耦合

行為型:滿足物件之間的動態行為特徵

一、工廠方法-建立型類模式

class product

//...一些操作

class product1:public product

//...一些操作

class product2:public product

//...一些操作

class creator//可以定義一些預設操作

virtual product* create(productid);//工廠方法

//一些操作,比如對返回的product進行操作,或者對建立product

//的一些輔助操作,都可以宣告為virtual

class creator1:public creator//可以定義一些預設操作

product* create(productid);//工廠方法

//一些操作,比如對返回的product進行操作,或者對建立product

//的一些輔助操作,都可以宣告為virtual

class creator2:public creator//可以定義一些預設操作

product* create(productid);//工廠方法

//一些操作,比如對返回的product進行操作,或者對建立product

//的一些輔助操作,都可以宣告為virtual

通過工廠方法,將乙個物件的部分建立工作延遲到子類,解耦產品的實現和使用。方便了產品改變。

二、簡單工廠

給工廠方法引數化,則稱為簡單工廠。

product* creator::create(productid id)

class abstractproducta1:public abstractproducta

class abstractproducta2:public abstractproducta

class abstractproductb

class abstractproductb1:public abstractproductb

class abstractproductb2:public abstractproductb

class abstractfactory

//下面每乙個介面通常都是通過工廠方法來實現

virtual abstractproducta* createprocudta(){}//=0

virtual abstractproductb* createprocudtb(){}//=0

class concretefactory1

//下面每乙個介面通常都是通過工廠方法來實現

virtual abstractproducta* createprocudta(){}

virtual abstractproductb* createprocudtb(){}

class concretefactory2

//下面每乙個介面通常都是通過工廠方法來實現

virtual abstractproducta* createprocudta(){}

virtual abstractproductb* createprocudtb(){}

由此,我們可以看到,抽象工廠作為物件型建立模式,主要提供建立所需物件的一系列介面(這些介面通常通過工廠方法實現),這些物件通過組合方式來組建物件。缺點是如果使用者擴充套件介面,則抽象工廠需要改變。

而工廠方法作為類建立型模式,通過繼承來建立物件,將乙個類的例項化延遲到其子類。

兩者都封裝物件建立,來實現使用者與所使用的具體產品(使用者與產品)之間的解耦。

四、oo principles

封裝變化的量

組合優先於繼承

面向介面程式設計,而非實現

尋求物件繼承間的松耦合

classes should be open for extension but closed for modification

幾個與設計模式相關的基本概念和原則

設計模式基本原則

抽象工廠,工廠方法和簡單工廠的對比

抽象工廠 生產多個抽象產品,即形成了抽象產品族,則需要抽象多個抽象方法,如果把 乙個抽象產品和乙個抽象方法 當做乙個 工廠方法 理解,則這樣就形成了抽象的工廠,工廠中都是抽象的,無業務邏輯。每需要乙個新的產品族的時候,擴充套件具體類即可。缺點 只能生產產品族,產品族是固定的,即無法新增新產品。工廠方...

簡單工廠,工廠方法,抽象工廠

簡單工廠,工廠方法,抽象工廠都屬於設計模式中的建立型模式。其主要功能都是幫助我們把物件的例項化部分抽取了出來,優化了系統的架構,並且增強了系統的擴充套件性。本文是本人對這三種模式學習後的乙個小結以及對他們之間的區別的理解。簡單工廠 簡單工廠模式的工廠類一般是使用靜態方法,通過接收的引數的不同來返回不...

簡單工廠 工廠方法 抽象工廠

簡單工廠 乙個工廠類 根據傳入的參量決定建立出哪一種產品類的例項 直接乙個工廠類,內部通過 swith operator add類實現該介面 adddao implements dao dao的實現類 客戶端 dao dao new adddao dao.createoper 產生物件 這樣如果需要...