工廠模式是建立模式,主要是為建立物件提供過渡介面 ,以便將建立物件的具體過程遮蔽隔離起來,達到提高靈活性的目的。
工廠模式在《深入淺出設計模式》和《大話設計模式》中分為三類:
這三種模式從上到下逐步抽象,並且更具有一般性。
我剛開始看著《大話設計模式》學習,抽象工廠還沒看到,所以這一篇就先記一下前兩種,後面看到了再更新。。。
簡單工廠模式又稱為靜態工廠方法模式,它其實不是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#的反射機制可以解決分支判斷的問題。嗯,後面再說。 工廠模式詳解
簡單工廠模式是由乙個工廠物件根據收到的訊息決定要建立哪乙個類的物件例項。工廠類負責建立的物件比較少,客戶只需要傳入工廠類引數,對於如何建立物件 邏輯 不關心。簡單工廠模式很容易違反高內聚低耦合的原則,因此一般只在很簡單的情況下使用。最大的優點在於工廠類中包含了必要的邏輯,根據客戶需要的邏輯動態例項化...
工廠模式詳解
參照原文 設計模式之三種工廠模式 建立物件不再需要 new,我只需要將需要生產什麼東西告訴工廠,工廠就能生產出對應的物件例項 問題背景 大眾集團要生產汽車,但是不確定要生產哪幾個品牌的汽車 角色扮演 車 vwcar 類 audicar 類 工廠 factory 類 客戶端 需要去例項化車的人或者其它...
二 工廠模式詳解
從設計模式的型別上來說,簡單工廠模式是屬於建立型模式,又叫做靜態工廠方法 static factory method 模式,但不屬於23種gof設計模式之一。簡單工廠模式是由乙個工廠物件決定建立出哪一種產品類的例項。簡單工廠模式是工廠模式家族中最簡單實用的模式,可以理解為是不同工廠模式的乙個特殊實現...