設計模式之工廠模式

2021-08-21 04:54:22 字數 2453 閱讀 6286

定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類。工廠模式使乙個類的例項化延遲到其子類
舉個栗子:

定義乙個抽象產品類product負責定義產品的共性,實現對事物的抽象定義;abstractcreator為抽象工廠,具體如何建立由具體的實現工廠contractorcreator完成。

//抽象產品類

public

abstract

class product

//抽象方法

public

abstract

void

method2();

}

//具體產品類a

public

class

producta

extends

product

}//具體產品類b

public

class

productb

extends

product

}

// 抽象工廠類

public

abstract

class

abstractcreator

//具體的實現工廠類

public

class

productcreator

extends

abstractcreator catch (exception e)

return (t) product;

}}

//場景類

public

class client

}

優點

* 結構清晰,易於擴充套件。在增加產品類的情況下,只需要增加具體的產品類,或者適當的修改具體的工廠類或擴充套件乙個工廠類。

* 遮蔽產品類。產品類如何變化,呼叫者不需要關心,只需要關心產品的介面。

* 解耦合。高層模組只需要知道產品的抽象類,其他的實現類都不用關心,符合迪公尺特法則,也符合依賴倒置原則和黎克特制替換原則。

去掉抽象工廠abstractcreator,修改具體的實現工廠contractorcreator中的方法為static,簡化了類的建立過程。也稱為靜態工廠模式,缺點是工廠類的擴充套件比較困難

//具體實現工廠類

public

class productcreator catch (exception e)

return (t) product;

}}

//場景類

public

class client

}

當專案比較複雜時,比如乙個產品類有許多個具體的產品實現類,每個實現類的初始化方法都不同,可以考慮為每乙個產品定義乙個建立者,由呼叫者自己去選擇與哪個工廠方法關聯。

// 抽象工廠類

//抽象方法之後不再需要引數,因為每個產品工廠只負責建立自己的產品物件

public

abstract

class abstractcreator

//產品子工廠類

public

class

productacreator

extends

abstractcreator

}

單例工廠可以通過反射建立乙個單例類

//單例類

public

class singleton

public

void

dosomething()

}

//單例工廠類

public

class singletonfactory catch (exception e)

}public

static singleton getsingleton()

}

//場景類

public

class client

}

乙個物件被消費完後,並不立即釋放,工廠類保持其初始狀態,等待再次被使用。

//延遲載入的工廠類

public

class productfactory else else ("productb".equals(type))

//放入快取

pmap.put(type, product);

}return product;

}}

延遲載入是可以擴充套件的,比如限制乙個產品類的最大例項化數量,可以通過判斷map中的已有物件數量實現。例如jdbc中連線資料庫最大連線數。

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

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

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

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

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

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