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

2021-08-28 09:13:32 字數 1785 閱讀 2276

抽象工廠又叫做工廠的工廠。從某個角度來說抽象工廠是工廠方法模式的公升級版。工廠方法模式相對簡單,只負責某一類產品的建立工作,而工廠方法模式很強大,能建立很多的產品,從這個角度來說抽象工廠模式確實是工廠方法模式的公升級。但是,從職能和應用場景上來看,不應該將抽象工廠看成是工廠方法模式的公升級版。工廠方法模式通常運用在具有相同功能但是實現不同的產品類的建立,而抽象工廠模式則是運用於具備不同功能的產品族的建立。例如電腦廠商,通常乙個電腦廠商既生產電腦也生產滑鼠和鍵盤,如聯想工廠生產聯想的電腦,聯想滑鼠,聯想鍵盤;華碩工廠生產華碩電腦、華碩滑鼠和華碩鍵盤,而這些產品功能是不同的。且看下面**實現:

package com.factory.abstractfactory;

public class test

}abstract class mouse

abstract class computer

abstract class keyboard

abstract class compute***ctory

class levonocompute***ctory extends compute***ctory

public mouse createmouse()

public keyboard createkeyboard()

}class asuscompute***ctory extends compute***ctory

public mouse createmouse()

public keyboard createkeyboard()

}class levonomouse extends mouse

class asusmouse extends mouse

class levonocomputer extends computer

class asuscomputer extends computer

class levonokeyboard extends keyboard

class asuskeyboard extends keyboard

抽象工廠的類圖結構如下所示:

在圖中,我們擁有keyboard、computer和mouse三個產品族,每個產品族分別有聯想和華碩兩個牌子的產品;同時我們還擁有乙個抽象工廠:compute***ctory,其有兩個子類levonocompute***ctory和asuscompute***ctory,分別負責建立聯想和華碩的鍵盤、電腦和滑鼠。

假設現在需求變更,不僅需要生產電腦、鍵盤和滑鼠,還需要生產滑鼠墊,那麼就需要再擴充套件乙個產品族:滑鼠墊。相應的也就需要增加聯想和華碩品牌的滑鼠墊類,並修改抽象工廠類:compute***ctory,進而levonocompute***ctory和asuscompute***ctory也需要改變,違反了修改關閉原則。這也是抽象工廠模式最大的缺點:產品族擴充套件難。

1.封裝性,每個產品的實現類不是高層模組需要關心的,它僅僅關心介面,只需要知道工廠類是誰就能建立出需要的物件。

2.產品族內的約束為非公開狀態。如生產一台電腦就有對應的乙個鍵盤和乙個滑鼠。

乙個物件族(或者一組沒有任何關係的物件)都有相同的約束,則可以使用抽象工廠模式。如乙個文字編輯器和乙個編輯器,都是軟體實體,但linux和windows下的文字編輯器和編輯器都是同樣的功能和介面,但是實現的**是不一樣的,這就有了共同的約束條件:作業系統型別。於是就可以使用抽象工廠模式產生不同作業系統下的文字編輯器和編輯器。

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

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

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

為什麼引入抽象工廠模式?乙個介面代表一系列操作,當我們需要的物件需要多個介面,而這些介面又是不相干的,同時對於類的建立我們不需要知道具體的實現細節,只需要知道某個特徵就可以,雖然工廠方法模式可以滿足要求,但是工廠方法模式會讓類本身實現很多不相關的操作,同時增加了物件內部的複雜性,我們需要一種從更高層...

設計模式之三 工廠模式

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