設計模式 建立型 工廠方法 抽象工廠

2021-10-20 11:17:01 字數 1959 閱讀 3941

工廠方法以及抽象工廠都是頻率出現比較高的設計模式,他們屬於建立型。

英文:factory method

使用頻率:高

作用

定義乙個建立物件的介面,讓子類決定建立什麼樣的例項物件。

說明

工廠類有時候不僅僅表現為建立乙個產品類並返回該產品類,他也可以表現為一種業務相關的類,並且自行維護這個建立的產品。

比如有時候單純的為了建立物件,我們就將其當作工廠,只負責建立物件。

而比如文件編輯器,工廠就是編輯器,那麼他除了負責建立文件物件,他還負責維護這些建立的物件,並且操作這些物件。

好處

比起使用者直接建立具體的物件concreateproduct,我們可以解耦客戶和具體的產品,並且復用基類的**。如果需要新增類似的產品,那麼新增對應的工廠和產品即可,方便擴充套件,遵守開放封閉原則。

對於下面的真是世界類圖,也即是辦公軟體實現

可擴充套件:如果我需要增加ppt檔案編輯器,那麼直接復用ieditor和idocument裡面已經有的實現,基於這兩個介面建立自己的子類。而在客戶**層面只需要建立ppteditor就可以,建立對應的新的文件,以及操作該文件pptdoc。

只需要將原來客戶建立**用新的ppteditor代替texteditor就可以了。其他的**都不需要改動,便可以新建ppt文件,關閉ppt文件。(解耦帶來的好處)

類圖

結構化的類圖

真實世界

假如我們需要實現辦公軟體,支援文字編輯器(比如word)/表單編輯器(excel),也就是圖中的ieditor介面以及子類;而我們需要編輯文件,我們將文件抽象成idocument。

比如編輯器支援建立文件/關閉文件等操作,他們直接與介面耦合,不耦合具體實現。

而新建文件newdoc該新建文字文件還是**文件呢,那就具體由子類決定,比如texteditor就直接建立textdoc,而sheeteditor建立sheetdoc。

這裡面editor相關類就是工廠,document文件相關類就是產品物件,由editor來建立。

英文:abstract factory

使用頻率:高

作用:提供乙個介面使用者建立一組關聯或者依賴的物件,並且在介面不知道具體建立的型別。

說明:其實和工廠方法比較像,但是他是建立了一組互相關聯依賴的物件。注意不是簡單的乙個大工廠,建立一組無關的物件。如果無關,設計就有點不合理了。

類圖:比如形狀工廠,用於建立線條/圖形以及其他一些可擴充套件的形狀;但是這個工廠具體要分文字文件和**文件,他們建立的物件是不同的。文字文件中圖形可以嵌入到文字裡面,也可以相對位置擺放;但是**是不必嵌入文字的。

設計模式 工廠模式(工廠方法 抽象工廠)

1 工廠方法模式 factory method 定義乙個用於建立物件的介面,讓子類決定例項化哪個類。工廠方法使乙個類的例項化延遲到其子類。正如建立交通工具,可以通過不同的工廠方法建立所需的物件。類圖 對比 1 工廠方法在產品維度,即類圖中movable方向拓展比較方便,只需增加對應的類及相應的工廠方...

設計模式 簡單工廠 工廠方法 抽象工廠方法模式

簡介 工廠方法模式分為 簡單工廠模式 工廠方法模式 抽象工廠方法模式 簡單工廠模式是屬於建立型模式,又叫做靜態工廠方法 static factory method 模式,但不屬於23種gof設計模式之一。簡單工廠模式是由乙個工廠物件決定建立出哪一種產品類的實 uml圖示例 public class ...

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

在業務邏輯中往往有需要建立物件的需求 如何將這部分邏輯封裝並且使得其能個適應於頻繁的變化呢?簡單工廠模式 將物件建立邏輯封裝隔離在簡單工廠類的方法中。簡單工廠的常見實現方式 1 簡單工廠類以及其建立物件的靜態方法 其客戶可以直接呼叫該類的靜態方法。2 簡單工廠類以及其建立物件的成員方法 其客戶 需要...