設計模式之工廠模式

2021-10-10 09:47:06 字數 2082 閱讀 4749

define an inte***ce for creating an object, but let subclasses decide which class to insantiate.factory method lets a class defer instantiation to subclasses.

序號內容

鏈結位址

1設計模式六大原則

2單例模式

3工廠模式

4抽象工廠模式及與工廠模式區別

5模板方法模式

6建造者模式

7**模式

8裝飾模式

9介面卡模式

10觀察者模式

定義乙個用於建立物件的介面,然子類決定例項化哪乙個類。工廠方法使乙個類的例項化延遲到其子類。

工廠方法的通用類圖:

工廠方法模式中,抽象產品類product負責定義產品的共性,實現對事物最抽象的定義;creator為抽象建立類,也就是抽象工廠,具體如何建立產品類是由具體的實現工廠concretecreator完成的。

抽象產品類**清單:

public

abstract

class

product

// 抽象方法

public

abstract

void

method2()

;}

具體的產品類可以分為多個,都繼承自抽象產品類:

public

class

concreteproduct1

extends

product

}public

class

concreteproduct2

extends

product

}

抽象工廠類負責定義產品物件的產生:

public

abstract

class

creator

具體工廠類:

public

class

concretecreator

extends

creator

catch

(exception e)

return

(t)product;

}}

場景類呼叫:

public

class

client

}

工廠模式是典型的解耦框架,其他實現類不需要關心,符合迪公尺特法則;符合依賴倒置原則,只依賴產品類的抽象;符合裡式替換原則,產品子類替換產品父類,沒問題!

當乙個模組只需壓乙個工廠類的時候,沒有必要把它生產出來,直接使用靜態方法。這樣稱為簡單工廠模式,也稱作靜態工廠模式。實現比較簡單,邏輯更為簡化,缺點是工廠類的擴充套件比較困難,不符合開閉原則。

舉個栗子:女媧造人,女媧可以造三種人:黑色、白色、黃色人種。她乙個個捏,就太慢了,於是使用工廠模式。工廠模式類圖:

在簡單工廠模式中:

在乙個複雜專案的裡面,如果把所有的產品類都放在乙個工廠方法中進行初始化會使**結構不清晰。例如乙個產品有五個具體實現,每個實現類的初始化方法都不相同,如果都寫在乙個方法中,會導致該方法臃腫。

可以為每乙個產品定義乙個創造者,然後由呼叫者自己去選擇與那種工廠方法關聯。這樣建立類的職責清晰,結構簡單。但是擴充套件時就需要建立乙個相應的工廠類。

在多工廠的時候,增加乙個協調類,避免呼叫者與各個子工廠交流,協調類的作用是封裝子工廠類,對高層次模組提供統一的訪問介面。

設計模式 設計模式之工廠模式

工廠方法模式 建立模式 使用場景?作用?形態?場景 大量類似的實體類 要建立的實體類都是同一本質的東西 披薩 有部分類似功能 準備 烘烤 切法 實現方式不一樣 準備的材料不同 烘烤時間不同 切法不同 將繁瑣複雜的建立類的過程聚集在一起,有序清晰 把具體例項化的過程從客戶 中抽離 作用 1 將建立物件...

c 設計模式 之 工廠模式之 工廠模式

1 uml類圖 實現和依賴關係 實現 sportfactory jeepfactory hatchbackfactory 實現 ifactory 介面 sportcar jeepcar hatchbackcar 實現 icar 介面 依賴 ifactory 依賴 icar sportfactory ...

設計模式 工廠模式之簡單工廠模式

定義 由乙個工廠物件 工廠類 來指定建立某乙個產品類的例項。使用場景 客戶端只需傳入指定的引數即可,工廠類負責建立的物件較少 因為指定了傳入的引數 介面類 本想用iphone命名的,見諒 public inte ce phone實現介面類 public class huaweiphone imple...