簡單工廠模式
簡單工廠模式,提供乙個建立物件例項的功能,而無需關心其具體實現,屬於建立型模式。適合對大量具有相同介面的類進行例項化,推遲到執行的時候才決定要建立哪個類的例項。簡單工程的本質是選擇實現。
寫乙個計算器控制台程式,要求輸入兩個數和運算符號,得到結果。
理由: 加減乘除法的都是對兩個數進行運算,區別在於運算子不同,運算方式略有不同。
故可以用工廠模式,先建立乙個運算類作為父類,然後繼承運算類建立加減乘除4個子類。
下圖是幾種類的uml關係圖。
operation運算類---父類
class operation:
numa = null
numb = null
def getresult(self):
pass
加減乘除類---從運算類上繼承過來
class operationadd(operation):
def getresult(self):
return self.numa + self.numb
class operationsub(operation):
def getresult(self):
return self.numa - self.numb
class operationmul(operation):
def getresult(self):
return self.numa * self.numb
class operationdiv(operation):
def getresult(self):
try:
result = self.numa / self.numb
return result
except:
print "error: divided by zero"
return 0
class undefoperator(operator):
def getresult(self):
print "error: undefined operator"
return 0
工廠類---- 工廠例項化了合適的物件,通過多型,返回父類的方式實現了計算結果。
class operationfactory:
operators = {}
operators['+'] = operationadd()
operators['-'] = operationsub()
operators['*'] = operationmul()
operators['/'] = operationdiv()
def getresult(self, ch):
if ch in operators:
op = operators[ch]
else:
op = undefoperator()
return op
該工廠類的在c/c++中的switch/case語句來選擇合適的物件,這裡利用了字典的資料結構來代替。
優點是將運算子作為鍵,能快速的找到合適的例項化物件;缺點是為了構造這個字典把所有的運算子型別的物件都例項化了,增加了不必要的空間和時間上的浪費。
如果化成if/elif/else分支判斷的話,每個條件都要進行判斷,計算機做了很多無用功,時間上有些浪費;空間上只會例項化合適的類物件,沒有空間上的浪費。
客戶端主程式
if __name__ == '__main__':
oper = raw_input("operator is : ")
numa = raw_input("a: ")
numb = raw_input("b: ")
facotry = operato***ctory()
cal = facotry.getresult(oper)
cal.numa = numa
cal.numb = numb
cal.getresult()
使用簡單工廠模式完成的計算器,能夠隔離運算子的變化,即使增加sin, cos 等其他運算子,客戶端主程式都不需要變更,只需要在子類中增加乙個類物件,然後在工廠類中的字典裡增加相應的鍵值。
優點:缺點:
簡單工廠是用來選擇實現的,可以有多個用於選擇並建立物件的方法。而抽象工廠模式是用來選擇產品簇來實現的,一般有多個用於選擇並建立物件的方法。
如果抽象工廠退化成為只有乙個實現,就變成了簡單工廠。
工廠方法把選擇具體實現的功能延遲到子類去實現。如果把工廠方法中選擇的實現放到父類直接實現,就等同於簡單工廠。
簡單工廠模式(python版)
工廠模式有一種非常形象的描述,建立物件的類就如乙個工廠,而需要被建立的物件就是乙個個產品 在工廠中加工產品,使用產品的人,不用在乎產品是如何生產出來的。從軟體開發的角度來說,這樣就有效的降低了模組之間的耦合。簡單工廠的作用是例項化物件,而不需要客戶了解這個物件屬於哪個具體的子類。簡單工廠例項化的類具...
Python簡單工廠模式
簡單工廠屬於類的創新性模式,又叫靜態工廠方法模式。是專門通過定義乙個類來負責建立其他類的例項,被建立的例項通常都具有相同的父類。模式特點 工廠工具條件產生不同功能的類。簡單工廠的組成要素 負責具體產品物件的建立工作,是該模式的核心。當場景比較負責的時候,可能需要 乙個工廠類來負責產品的建立。以及產品...
python簡單工廠模式
簡單工廠模式相當於是乙個4s店中有各種汽車,建立在乙個類中,客戶無需知道具體汽車型號,只需要知道汽車類所對應的引數即可。但是工廠的職責過重,而且當型別過多時不利於系統的擴充套件維護。現代汽車4s店類 class carstore object 示例方法 建立工廠返回工廠物件引用 def init s...