java設計模式 工廠方法模式

2021-06-16 20:13:24 字數 2212 閱讀 1056

簡單工廠模式的應用就是用來建立乙個物件,簡單工廠模式是將所有物件的初始化集於乙個具體的工廠類來實現,這個工廠類負責所有產品的建立,但是這種建立只能建立單一的產品,如簡單工廠模式裡的chickenfactory這種工廠只能生產雞肉這個系列的產品,而當需求發生變化時簡單工廠模式就無法應對了。

例如:我再一次帶mm光臨了麥當勞時,這次mm不想吃雞翅了,而是選擇了吃漢堡,可見這個時候chickenfactory無法滿足客戶需要了,需要做出更改,方法就是再加乙個工廠類:hamburge***ctory該類負責建立漢堡系列產品,這種方法造成的直接結果就是每一種產品都需要乙個具體的工廠類,造成工廠過多,客戶端使用不方便,因為我帶mm去麥當勞不能由mm或者我決定雞翅和漢堡是怎麼生產出來的,我們只需要跟服務員說一聲吃什麼就可以了。 而工廠方法模式正是解決這種弊端而出現的,在工廠方法模式裡,由乙個抽象工廠類負責所有產品的建立,工廠方法模式可以允許很多具體工廠類從抽象工廠類中將建立行為繼承下來,從而可以成為多個簡單工廠模式的綜合,進而推廣了簡單工廠模式。

二. 舉例:

此模式涉及到的角色:

抽象工廠角色(mcdonaldfactory)

具體工廠角色(chickenfactory, hamburge***ctory)

抽象產品角色(product)

具體產品角色(chickenwing, beefhamburger)

/** 

* 抽象工廠類

* @author administrator

* */

public inte***ce mcdonaldfactory

/** 

* 雞肉工廠類,負責雞肉類產品的建立

* @author administrator

* */

public class chickenfactory implements mcdonaldfactory

}

/** 

* 漢堡產品類,負責漢堡系列產品的建立

* @author administrator

* */

public class hamburge***ctory implements mcdonaldfactory

}

/** 

* 抽象產品類,提供統一的介面

* @author administrator

* */

public inte***ce product

/** 

* 具體產品,雞翅實現了父介面的price()方法

* @author administrator

* */

public class chickenwing implements product

}

/** 

* 具體產品類,實現了父介面中的price()方法

* @author administrator

* */

public class beefhamburger implements product

}

客戶端呼叫:

mcdonaldfactory cf = new chickenfactory();  

cf.factory().price();

mcdonaldfactory bh = new hamburge***ctory();

bh.factory().price();

三. 總結:工廠方法模式的核心工廠類不再負責所有產品的建立,而是將具體建立的工作交給子類去做,成為乙個抽象工廠角色,進負責給出具體工廠類必須實現的介面,而不接觸哪乙個產品類應該被例項化這種細節,這使得工廠方法模式可以用來允許在不修改具體工廠角色的情況下引進新的產品,這一特點使得他具有超過簡單工廠模式的優越性。

Java設計模式 工廠方法模式

定義乙個用於建立物件的介面,讓子類決定將哪乙個類例項化。factory method 使乙個類的例項化延遲到其子類。package car inte ce public inte ce icar inte ce package car imple import car inte ce.icar in...

Java設計模式 工廠方法模式

工廠方法模式應用背景 客戶類不關心使用哪個具體的類,只關心介面所提供的功能。建立過程比較複雜,例如需要初始化其他關聯的資源類。介面或者抽象類有許多實現類,客戶 需要編寫大量if else邏輯來決定執行時使用哪個具體的實現類。不希望給客戶程式暴露太多的類的內部結構,這樣做可以降低耦合度。優化效能,比如...

JAVA設計模式 工廠方法模式

package com.fsti.factory.factorymethod public inte ce output package com.fsti.factory.factorymethod public class printer implements output else public...