簡單工廠模式與工廠方法模式

2021-07-29 15:25:57 字數 2564 閱讀 9250

工廠模式是建立模式,主要是為建立物件提供過渡介面 ,以便將建立物件的具體過程遮蔽隔離起來,達到提高靈活性的目的。

工廠模式在《深入淺出設計模式》和《大話設計模式》中分為三類:

這三種模式從上到下逐步抽象,並且更具有一般性。

我剛開始看著《大話設計模式》學習,抽象工廠還沒看到,所以這一篇就先記一下前兩種,後面看到了再更新。。。

簡單工廠模式又稱為靜態工廠方法模式,它其實不是23種設計模式之一,只是工廠模式的簡單版本(嗯,看名字就知道了)。我的理解,簡單地說,它就是用乙個單獨的類來進行建立例項這個過程。

簡單工廠模式的組成有:

類圖如下:

借《大話設計模式》中的例子,展示一下模式的應用。

語言:c#

編譯環境:mac monodevelop

要求:實現乙個計算器的功能。

計算器有不同的運算子(+、-、*、/),這些運算子都有乙個共同的特點:使用兩個運算元,然後得出運算結果,因此我們可以寫出運算基類。

public

class operation

set

}public

double numberb

set

}public

virtual

double

getresult()

}

接下來,寫出繼承自運算類的加法類、減法類等。

class operationadd : operation 

}class operationsub : operation

}

乘法類、除法類同理可以實現。

接下來是關鍵的工廠類,根據傳入的引數的不同,動態地決定例項化哪個類。

public

class operationfactory

return oper;}}

最後是客戶端的實現。

operation oper;

oper = operationfactory.createoperate ("+");

oper.numbera = 1

;oper.numberb = 2

;double result = oper.getresult ();

console.writeline ("result = " + result.tostring());

這樣就完成了簡單工廠模式,如果後面要增加其他運算,比如乘方、正弦等,只需要增加相應的運運算元類,然後在工廠類裡增加判斷即可。

工廠類含有必要的判斷邏輯,可以決定在什麼時候建立哪乙個產品類的例項,客戶端可以免除直接建立產品物件的責任,而僅僅」消費」產品。簡單工廠模式通過這種做法實現了對責任的分割。

缺點:

1) 當產品有複雜的多層等級結構時,工廠類只有自己,以不變應萬變,就是模式的缺點。因為工廠類集中了所有產品建立邏輯,一旦不能正常工作,整個系統都要受到影響。

2) 系統擴充套件困難,一旦新增新產品就不得不修改工廠邏輯,有可能造成工廠邏輯過於複雜,而且違背了開閉原則。

3) 簡單工廠模式通常使用靜態工廠方法,這使得無法由子類繼承,造成工廠角色無法形成基於繼承的等級結構。

工廠方法模式就可以很好地解決這種擴充套件的侷限性。

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

工廠方法模式的結構:

類圖如下:

接下來,看看如何用工廠方法模式改造上面的例子。

// 這是乙個工廠類的介面

inte***ce

ifactory

// 以下是各個工廠子類,需要實現工廠介面

class

addfactory : ifactory

}class

subfactory : ifactory

}

接下來是客戶端的實現:

ifactory ope***ctory = new addfactory();

operation oper = ope***ctory.createoperation ();

oper.numbera = 1

;oper.numberb = 2

;double result = oper.getresult ();

console.writeline ("result = " + result.tostring());

工廠方法模式克服了簡單工廠違背開閉原則的缺點,又保持了封裝物件建立過程的優點。但缺點是每加乙個產品,就需要增加乙個產品工廠的類。簡單工廠的判斷是在工廠類裡,工廠方法模式其實是把判斷移到了客戶端。不過,c#的反射機制可以解決分支判斷的問題。嗯,後面再說。

簡單工廠模式與工廠方法模式

簡單工廠模式是屬於建立型模式,又叫做 靜態工廠方法 static factory method 模式,但不屬於23種gof設計模式之一。簡單工廠模式是由乙個工廠物件決定建立出哪一種產品類的例項。簡單工廠模式是工廠模式家族中最簡單實用的模式,可以理解為是不同工廠模式的乙個特殊實現。百科 最大的優點是包...

簡單工廠模式與工廠方法模式

簡單工廠模式,以計算器為例,結構如圖 簡單工廠模式的最大優點在於工廠類中包含了必要的邏輯判斷,根據客戶端的選擇條件動態例項化相關的類,對於客戶端來說,去除了與具體產品的依賴。問題在於,如果增加乙個子功能,需要新增相應的子類外,還要修改原有的工廠類,增加case判斷,修改原有的類,這就違背了 開放 封...

簡單工廠與工廠方法模式

簡單工廠模式 由乙個工廠物件決定建立出哪一種產品類的例項。1.簡單工廠模式是屬於建立型模式,又叫做靜態工廠方法模式,但不屬於23種gof設計模式之一。2.優點 工廠類是整個模式的關鍵.包含了必要的邏輯判斷,根據外界給定的資訊,決定究竟應該 建立哪個具體類的物件.通過使用工廠類,外界可以從直接建立具體...