簡單工廠模式 Python版

2021-06-28 23:29:04 字數 2515 閱讀 8238

簡單工廠模式

簡單工廠模式,提供乙個建立物件例項的功能,而無需關心其具體實現,屬於建立型模式。適合對大量具有相同介面的類進行例項化,推遲到執行的時候才決定要建立哪個類的例項。簡單工程的本質是選擇實現

寫乙個計算器控制台程式,要求輸入兩個數和運算符號,得到結果。

理由: 加減乘除法的都是對兩個數進行運算,區別在於運算子不同,運算方式略有不同。

故可以用工廠模式,先建立乙個運算類作為父類,然後繼承運算類建立加減乘除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...