設計模式筆記之三抽象工廠模式

2021-08-30 21:27:45 字數 2732 閱讀 1461

為什麼引入抽象工廠模式?

乙個介面代表一系列操作,當我們需要的物件需要多個介面,而這些介面又是不相干的,同時對於類的建立我們不需要知道具體的實現細節,只需要知道某個特徵就可以,雖然工廠方法模式可以滿足要求,但是工廠方法模式會讓類本身實現很多不相關的操作,同時增加了物件內部的複雜性,我們需要一種從更高層來抽象,將介面分離,同時在建立物件的時候,又將不同介面之前操作進行組合的角色,這個就是抽象工廠模式。

抽象工廠模式是什麼?

提供乙個建立一系列相關或相互依賴物件的介面,而無須指定他們具體的類。

核心思想:

在工廠模式的基礎上,進行更高一層的抽象,將不同的介面進行組合,通過工廠,從而生成具有多個操作的具體例項,抽象工廠模式從頂層出發,我們先考慮生產生什麼,然後再將物件的操作進行拆分,將相同的操作交給特定的廠商。

具體例項

我們現在需要定製一批電腦,委託a和b公司為我們生產,但是a和b公司會將不同的部件生產交給不同的工廠進行加工,到時候在運輸過來進行組裝。

具體**:

package com.dong.abstractfactory;

//工廠介面,可以理解總工廠

public inte***ce facotory

package com.dong.abstractfactory;

//a工廠

public class afactory implements facotory

@override

public keyboard createkeyboard()

}package com.dong.abstractfactory;

//b工廠

public class bfactory implements facotory

@override

public keyboard createkeyboard()

}package com.dong.abstractfactory;

//滑鼠介面,即包含鍵盤的一些屬性和功能

public inte***ce mouse

package com.dong.abstractfactory;

//鍵盤介面,即包含鍵盤的一些屬性和功能

public inte***ce keyboard

package com.dong.abstractfactory;

//a鍵盤生產商

public class akeyboard implements keyboard

}package com.dong.abstractfactory;

//a滑鼠生產商

public class amouse implements mouse

}package com.dong.abstractfactory;

//b滑鼠生產商

public class bmouse implements mouse

}package com.dong.abstractfactory;

//b鍵盤生產商

public class bkeyboard implements keyboard

}package com.dong.abstractfactory;

/** * 結果分析:

* a mouse

a keyboary

com.dong.abstractfactory.amouse@136432db

* @author liud

* */

public class factorymain

}

優點實現了良好的框架結構,分離不相關的介面,

頂層設計不需關注具體實現,即具有良好的封裝性,將具體生產交給具體的實現廠商,實現廠商又可以看做是乙個使用工廠模式的例子,用來建立物件,只不過抽象工廠方法,將物件的同種操作,使用介面進行了統一和分離,使用的時候,只需進行組合即可。

缺點

不利於擴充套件,當我們要增加乙個廠商時,我們需要改動實現介面的廠商,其次需要給每個介面增加實現類,當我們想要增加乙個新的不同的物件時,這個物件和原來的廠商沒有任何相同之處,當我們將其新增到抽象工廠類中時,所有的類,介面,都必須變動。

新的感悟:

例如,當我們想要生產鞋子,鞋子的種類很多,我們使用工廠模式進行生產,我們可以提供幾個簡單的提示,就可以利用工廠生產出我們需要的鞋子,例如我們需要運動鞋,我們告訴工廠運動,,需要帆布鞋,告訴工廠帆布就可以,這裡只不過是一種生產物件的方式而已,別的方式也可以,重點在於,工廠模式的生產是基於一種單一的特性,我們只需要生產鞋子(假定鞋子的生產具有單一性)。

抽象工廠模式,在舉個例子,當我們需要生產衣服,當這個物件可以進行拆分,當使用工廠模式,則會生產出a工廠的整套衣服,當然可以進行分開設計,讓工廠生產出什麼樣的上衣,什麼樣的下衣,但是全都是由a工廠生產,如果a公司的是生產的上衣***,但是下衣質量不好,這個時候我們可以使用抽象工廠模式,即將上衣和下衣的生產承包給不同的公司,然後再在上層使用工廠模式進行組合即可。

抽象工廠模式,我的理解是,最大的好處是實現了工廠的定製,生產的選擇和組合性。

每日設計模式 工廠模式之三(抽象工廠模式)

抽象工廠又叫做工廠的工廠。從某個角度來說抽象工廠是工廠方法模式的公升級版。工廠方法模式相對簡單,只負責某一類產品的建立工作,而工廠方法模式很強大,能建立很多的產品,從這個角度來說抽象工廠模式確實是工廠方法模式的公升級。但是,從職能和應用場景上來看,不應該將抽象工廠看成是工廠方法模式的公升級版。工廠方...

探索設計模式之三 抽象工廠模式

前面介紹的 簡單工廠模式 和 工廠方法模式 立足點都是避免顯式的建立具體物件,封裝建立物件時可能出現的變化點,這已經能比較好的解決單個物件建立的問題,但實際業務中,還經常出現需要一系列物件互相關聯使用來完成任務的情況。對於存在關聯 以來的產品來說,使用簡單工廠或者工廠方法乙個乙個的建立其中的具體產品...

設計模式之三 工廠模式

如果要擴充套件的話,則要修改源 這樣如果以後產生的phone型別很多,那麼就要一直修改,維護成本高 如果萬一你哪個型別寫錯了怎麼辦 所以出現了工廠模式。工廠模式簡單來說就是乙個工廠對應乙個產品。比如說iphonefactory產生iphone系列的手機,xiaomifactory產生xiaomi系列...