Python設(shè)計(jì)模式之簡(jiǎn)單工廠模式實(shí)例詳解
本文實(shí)例講述了Python設(shè)計(jì)模式之簡(jiǎn)單工廠模式。分享給大家供大家參考,具體如下:
簡(jiǎn)單工廠模式(Simple Factory Pattern):是通過(guò)專門定義一個(gè)類來(lái)負(fù)責(zé)創(chuàng)建其他類的實(shí)例,被創(chuàng)建的實(shí)例通常都具有共同的父類.
下面使用簡(jiǎn)單工廠模式實(shí)現(xiàn)一個(gè)簡(jiǎn)單的四則運(yùn)算
#!/usr/bin/env python
# -*- coding:utf-8 -*-
__author__ = 'Andy'
'''
大話設(shè)計(jì)模式
用任意一種面向?qū)ο笳Z(yǔ)言實(shí)現(xiàn)一個(gè)計(jì)算器控制臺(tái)程序。要求輸入兩個(gè)數(shù)和運(yùn)算符號(hào),得到結(jié)果
設(shè)計(jì)模式——簡(jiǎn)單工廠模式
簡(jiǎn)單工廠模式(Simple Factory Pattern):是通過(guò)專門定義一個(gè)類來(lái)負(fù)責(zé)創(chuàng)建其他類的實(shí)例,被創(chuàng)建的實(shí)例通常都具有共同的父類。
'''
class Operation(object):
'''
四則運(yùn)算的父類,接收用戶輸入的數(shù)值
'''
def __init__(self, number1=0, number2=0):
self.num1 = number1
self.num2 = number2
def GetResult(self):
pass
pass
#加法運(yùn)算類
class OperationAdd(Operation):
def GetResult(self):
return self.num1 + self.num2
#減法運(yùn)算類
class OperationSub(Operation):
def GetResult(self):
return self.num1 - self.num2
#乘法運(yùn)算類
class OperationMul(Operation):
def GetResult(self):
return self.num1 * self.num2
#除法運(yùn)算類
class OperationDiv(Operation):
def GetResult(self):
if self.num2 == 0:
return '除數(shù)不能為0 '
return 1.0*self.num1 / self.num2
#其他操作符類
class OperationUndef(Operation):
def GetResult(self):
return '操作符錯(cuò)誤'
#簡(jiǎn)單工廠類
class OperationFactory(object):
def choose_oper(self,ch):
if ch == '+':
return OperationAdd()
elif ch == '-':
return OperationSub()
elif ch == '*':
return OperationMul()
elif ch == '/':
return OperationDiv()
else:
return OperationUndef()
if __name__ == "__main__":
ch = ''
while not ch == 'q':
num1 = input('請(qǐng)輸入第一個(gè)數(shù)值: ')
oper = str(raw_input('請(qǐng)輸入一個(gè)四則運(yùn)算符: '))
num2 = input('請(qǐng)輸入第二個(gè)數(shù)值: ')
# Operation(num1,num2)
OF = OperationFactory()
oper_obj = OF.choose_oper(oper)
oper_obj.num1 = num1
oper_obj.num2 = num2
print '運(yùn)算結(jié)果為: ',oper_obj.GetResult()
運(yùn)行結(jié)果:
請(qǐng)輸入第一個(gè)數(shù)值: 51
請(qǐng)輸入一個(gè)四則運(yùn)算符: -
請(qǐng)輸入第二個(gè)數(shù)值: 15
運(yùn)算結(jié)果為: 36
這幾個(gè)類的結(jié)構(gòu)圖如下:

專門定義一個(gè)Operation類作為父類,加減乘除運(yùn)算類繼承Operation類,OperationFactory類用來(lái)決定什么時(shí)候創(chuàng)建對(duì)應(yīng)的類
更多關(guān)于Python相關(guān)內(nèi)容可查看本站專題:《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python Socket編程技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》及《Python入門與進(jìn)階經(jīng)典教程》
希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。
相關(guān)文章
Python實(shí)現(xiàn)點(diǎn)陣字體讀取與轉(zhuǎn)換的方法
今天小編就為大家分享一篇Python實(shí)現(xiàn)點(diǎn)陣字體讀取與轉(zhuǎn)換的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-01-01
Python實(shí)現(xiàn)簡(jiǎn)單石頭剪刀布小游戲的示例代碼
石頭剪刀布是一種簡(jiǎn)單而又經(jīng)典的游戲,常常用于決定勝負(fù)或者娛樂(lè)消遣,本文將使用Python實(shí)現(xiàn)一個(gè)簡(jiǎn)單的石頭剪刀布游戲,需要的可以參考一下2023-06-06
python實(shí)現(xiàn)監(jiān)控某個(gè)服務(wù) 服務(wù)崩潰即發(fā)送郵件報(bào)告
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)監(jiān)控某個(gè)服務(wù),服務(wù)崩潰發(fā)送郵件報(bào)告,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-06-06
python神經(jīng)網(wǎng)絡(luò)使用Keras構(gòu)建RNN訓(xùn)練
這篇文章主要為大家介紹了python神經(jīng)網(wǎng)絡(luò)使用Keras構(gòu)建RNN網(wǎng)絡(luò)訓(xùn)練,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪<BR>2022-05-05
python使用itchat模塊給心愛的人每天發(fā)天氣預(yù)報(bào)
這篇文章主要介紹了python使用itchat模塊給心愛的人每天發(fā)天氣預(yù)報(bào),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-11-11
深入理解Python虛擬機(jī)中描述器的實(shí)現(xiàn)原理
這篇文章主要給大家介紹一個(gè)我們?cè)谑褂妙惖臅r(shí)候經(jīng)常使用但是卻很少在意的黑科技——描述器的實(shí)現(xiàn)原理,文中的示例代碼講解詳細(xì),需要的可以參考一下2023-05-05
Python3網(wǎng)絡(luò)爬蟲開發(fā)實(shí)戰(zhàn)之極驗(yàn)滑動(dòng)驗(yàn)證碼的識(shí)別
本節(jié)我們的目標(biāo)是用程序來(lái)識(shí)別并通過(guò)極驗(yàn)驗(yàn)證碼的驗(yàn)證,其步驟有分析識(shí)別思路、識(shí)別缺口位置、生成滑塊拖動(dòng)路徑,最后模擬實(shí)現(xiàn)滑塊拼合通過(guò)驗(yàn)證。需要的朋友可以參考下2019-08-08

