工廠模式是建立模式,主要是為建立物件提供過渡介面 ,以便將建立物件的具體過程遮蔽隔離起來,達到提高靈活性的目的。
工廠模式在《深入淺出設計模式》和《大話設計模式》中分為三類:
這三種模式從上到下逐步抽象,並且更具有一般性。
我剛開始看著《大話設計模式》學習,抽象工廠還沒看到,所以這一篇就先記一下前兩種,後面看到了再更新。。。
簡單工廠模式又稱為靜態工廠方法模式,它其實不是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.優點 工廠類是整個模式的關鍵.包含了必要的邏輯判斷,根據外界給定的資訊,決定究竟應該 建立哪個具體類的物件.通過使用工廠類,外界可以從直接建立具體...