Python下的設計模式學習(1) 簡單工廠模式

2021-10-21 10:14:37 字數 2356 閱讀 3731

使用物件導向的思想設計乙個簡單的計算器類

基於物件導向的四個原則即使得**具有可維護,可復用,可擴充套件,靈活性好的特點;我們需要通過封裝,繼承,多型把程式的耦合度降低。將程式的業務邏輯於介面邏輯分開,讓它們之間的耦合度下降,才可以達到容易維護和擴充套件。比如該問題,使用者只需要知道使用特定的符號,以及兩個數字,**程式則只獲得這三個資訊,其他的部分應該具有一致性,內部的具體實現和判斷應該由更底層的**來實現。所以這裡我們用到簡單工廠模式,定義乙個工廠類,對運算子進行判斷,再例項化對應不同運算類的的物件,而這些運算類具有相同的屬性和方法——兩個數字+返回結果的方法,所以建立乙個運算的主類,並使用多型在不同的運運算元類中實現返回結果的方法。

下面是基於以上的uml圖的python版本的**實現

'''

建立者:zhongbin

建立任務:使用簡單工廠模式實現乙個簡單的計算器

'''####運算類

class operation:

def __int__(self,numbera=none,numberb=none):

self.numbera=numbera

self.numberb=numberb

def setnumber(self,numbera,numberb):

self.numbera=numbera

self.numberb=numberb

def getresult(self):

pass

###對應不同符號的運算類

class operationadd(operation):

def getresult(self):

if self.numbera!=none and self.numberb!=none:

return self.numbera+self.numberb

else:

return "erro"

class operationsub(operation):

def getresult(self):

if self.numbera!=none and self.numberb!=none:

return self.numbera-self.numberb

else:

return "erro"

class operationmult(operation):

def getresult(self):

if self.numbera!=none and self.numberb!=none:

return self.numbera*self.numberb

else:

return "erro"

class operationdiv(operation):

def getresult(self):

if self.numbera!=none and self.numberb!=none:

if self.numberb!=0:

return self.numbera/self.numberb

else:

return "除數為0!"

else:

return "erro"

###運算的工廠類 根據符號返回對應的例項化的物件

class operationfatory:

def createoperate(self,oper):

operation=none

if oper=="+":

operation=operationadd()

elif oper=="-":

operation = operationsub()

elif oper=="*":

operation=operationmult()

elif oper=="/":

operation = operationdiv()

return operation

#主程式類

if __name__=="__main__":

operation=operationfatory().createoperate('+')

operation.setnumber(1,2)

print(operation.getresult())

可以看出在主程式中**使用者只需要知道運算符號以及運算的兩個數字就可以操作,而其他內部具體的運算過程並不知情。同時**本身具有很好的可拓展性,使用者需要新增其他運算符號時,只需要增加運算類,以及為工廠類新增分支就可以拓展功能,較好的實現了程式之間的低耦合。

設計模式的學習1

看了設計模式,到現在也該是處出貨時候了。首先必須明確設計模式的位置,它是在需求分析 use case 後,系統分析結束之後,設計時進行的。往往設計模式會帶來乙個問題 過度設計。因為設計模式要求增加類。同時我們看到他也不是萬靈藥,他受前期需求以及系統分析的影響。關鍵有以下幾點原則 1。乙個類最好只有乙...

設計模式學習1

以前寫程式,不太關注程式結構的設計,只是考慮著怎麼去實現功能,憑感覺去規劃。沒有把程式設計的方法上公升到乙個理論的高度上來,最近接觸了下設計模式,發現以前也用到了一些模式,但是卻沒有在意,仔細想想,使用模式去系統化的進行設計,好處很多。正如打仗,對戰術進行研究,上公升到乙個理論的高度上來,就是軍事理...

設計模式 學習 1

設計原則 1 單一職責原則 物件導向程式設計。2 開閉原則 可以擴充套件,不要修改原來的 3 黎克特制代換原則 引用父類的地方可以使用 子類替代。4 依賴倒轉原則 盡量在引數 返回值,引用等地方,使用介面和抽象類。5 介面隔離原則 每個介面應該承擔自己的責任,不要混在一起。6 合成復用原則 盡量使用...