設計模式 簡單工廠模式

2021-08-17 10:45:02 字數 2629 閱讀 4984

介紹簡單工廠模式之前先通過乙個披薩專案的例子來引出問題,然後給出簡單工廠模式這種解決方案,然後隨著披薩專案的不斷擴充套件,遇到新的問題,引出工廠方法模式,然後又遇到新的問題,引出最終解決方案,抽象工廠模式。

一、披薩專案介紹

比如乙個披薩店 ,店長一名,目前賣兩種口味披薩,greekpizza和cheesepizza,每個披薩都有prepare(),bake(),cut(),box()這4種步驟,原料,烘培,切割,打包,最後給使用者吃。

把上述這個過程抽象後,設計如下:

pizza披薩抽象類:

package

com.factorypattern.******factory;

public

abstract

class

pizza

greekpizza披薩類:

package

com.factorypattern.******factory;

public

class greekpizza extends

pizza

public

void

bake()

public

void

cut()

public

void

box()

}

cheesepizza披薩類:

package

com.factorypattern.******factory;

public

class cheesepizza extends

pizza

public

void

bake()

public

void

cut()

public

void

box()

}

客戶端,店長根據客戶點的餐生成不同的披薩:

try

catch

(exception e)

業務很簡答,根據使用者想買的披薩,生成不同的披薩。傳統的設定這樣也沒錯,如果業務發展,會造成什麼問題呢?

現在如果多了一種口味qiaokelipizza,正常辦法是生成乙個qiaokelipizza類,繼承於pizza,然後在orderpizza中,新增

if("qiaokeli".equal(ordertype)) pizza = new qiaokelipizza();
如果後來披薩口味越來越多,負責點餐的店長會很不開心的,既要點餐又要做披薩,乙個人忙不夠來,希望請乙個廚師來專門做披薩,那樣他才會輕鬆點。

他所想的解決方案,簡單工廠模式就可以做到。

二、簡單工廠模式

簡單工廠模式是類的建立模式,又叫做靜態工廠方法(static factory method)模式。簡單工廠模式是由乙個工廠物件決定建立出哪一種產品類的例項。

簡單工廠模式的結構如下:

從圖中可以看出,簡單工廠模式涉及到工廠角色,抽象產品角色以及具體產品角色等三個角色:

把上面的披薩專案用簡單工廠模式來現實的話,無非就是建立乙個工廠類(廚師)來接管店長之前要做得烤披薩的活,而店長只要告訴這個工廠類(廚師)他需要哪種披薩就好。

**示例講解:

******pizzafactory簡單工廠類,根據傳遞的引數來準備不同的披薩:

public

class

******pizzafactory

else

if (ordertype.equals("greek"))

return

pizza;}}

在使用時,店長只需要呼叫工廠類******pizzafactory的靜態方法createpizza()即可:

try

catch

(exception e)

這樣設計後,店長就輕鬆多了,只要負責告訴工廠類(廚師)需要什麼型別的披薩就可以,終於不要擔心搞錯了而負責任。

三、總結

上面用披薩專案的列子來講解了簡單工廠模式的使用,總結下優缺點:

簡單工廠模式的優點:

模式的核心是工廠類。這個類含有必要的判斷邏輯,可以決定在什麼時候建立哪乙個產品類的例項。而客戶端則可以免除直接建立物件的責任(比如那個服務員)。簡單工廠模式通過這種做法實現了對責任的分割。

簡單工廠模式的缺點:

這個工廠類集中了所有的建立邏輯,當有複雜的多層次等級結構時,所有的業務邏輯都在這個工廠類中實現。什麼時候它不能工作了,整個系統都會受到影響。並且簡單工廠模式違背了開閉原則(對擴充套件的開放,對修改的關閉)。

適用場景:

在以下情況下可以考慮使用簡單工廠模式:

1、工廠類負責建立的物件比較少,由於建立的物件較少,不會造成工廠方法中的業務邏輯太過複雜。

2、客戶端只知道傳入工廠類的引數,對於如何建立物件並不關心。

設計模式 工廠模式(簡單工廠)

一 簡單工廠 定義 簡單工廠模式 factory pattern 屬於類的創新型模式,又叫靜態工廠方法模式 static factorymethod pattern 是通過專門定義乙個類來負責建立其他類的例項,被建立的例項通常都具有共同的父類。特點 工廠類直接實現,乙個產品介面,乙個工廠類可以產生多...

設計模式(簡單工廠模式 工廠模式 抽象工廠模式)

當邏輯較為簡單時,可以直接建立對應的類。如下 include using namespace std class class banana class pear intmain 通過此 可以發現,使用者直接與客戶接觸,違背了dip 依賴倒轉 原則,過於麻煩,所以引出簡單工廠模式。include us...

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

請用任意一種物件導向語言實現計算器控制台程式,要求輸入兩個數和運算符號,得到結果。operation運算類 public class operation set public double numberb set public virtual double getresult 加減乘除類 using...