国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當(dāng)前位置: 首頁 - 科技 - 知識(shí)百科 - 正文

python版簡(jiǎn)單工廠模式的介紹

來源:懂視網(wǎng) 責(zé)編:小OO 時(shí)間:2020-11-27 14:13:20
文檔

python版簡(jiǎn)單工廠模式的介紹

什么是簡(jiǎn)單工廠模式;工廠模式有一種非常形象的描述,建立對(duì)象的類就如一個(gè)工廠,而需要被建立的對(duì)象就是一個(gè)個(gè)產(chǎn)品;在工廠中加工產(chǎn)品,使用產(chǎn)品的人,不用在乎產(chǎn)品是如何生產(chǎn)出來的。從軟件開發(fā)的角度來說,這樣就有效的降低了模塊之間的耦合。簡(jiǎn)單工廠的作用是實(shí)例化對(duì)象,而不需要客戶了解這個(gè)對(duì)象屬于哪個(gè)具體的子類。簡(jiǎn)單工廠實(shí)例化的類具有相同的接口或者基類,在子類比較固定并不需要擴(kuò)展時(shí),可以使用簡(jiǎn)單工廠。如數(shù)據(jù)庫生產(chǎn)工廠就是簡(jiǎn)單工廠的一個(gè)應(yīng)用。
推薦度:
導(dǎo)讀什么是簡(jiǎn)單工廠模式;工廠模式有一種非常形象的描述,建立對(duì)象的類就如一個(gè)工廠,而需要被建立的對(duì)象就是一個(gè)個(gè)產(chǎn)品;在工廠中加工產(chǎn)品,使用產(chǎn)品的人,不用在乎產(chǎn)品是如何生產(chǎn)出來的。從軟件開發(fā)的角度來說,這樣就有效的降低了模塊之間的耦合。簡(jiǎn)單工廠的作用是實(shí)例化對(duì)象,而不需要客戶了解這個(gè)對(duì)象屬于哪個(gè)具體的子類。簡(jiǎn)單工廠實(shí)例化的類具有相同的接口或者基類,在子類比較固定并不需要擴(kuò)展時(shí),可以使用簡(jiǎn)單工廠。如數(shù)據(jù)庫生產(chǎn)工廠就是簡(jiǎn)單工廠的一個(gè)應(yīng)用。
這篇文章主要為大家詳細(xì)介紹了python版簡(jiǎn)單工廠模式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

什么是簡(jiǎn)單工廠模式

工廠模式有一種非常形象的描述,建立對(duì)象的類就如一個(gè)工廠,而需要被建立的對(duì)象就是一個(gè)個(gè)產(chǎn)品;在工廠中加工產(chǎn)品,使用產(chǎn)品的人,不用在乎產(chǎn)品是如何生產(chǎn)出來的。從軟件開發(fā)的角度來說,這樣就有效的降低了模塊之間的耦合。
簡(jiǎn)單工廠的作用是實(shí)例化對(duì)象,而不需要客戶了解這個(gè)對(duì)象屬于哪個(gè)具體的子類。簡(jiǎn)單工廠實(shí)例化的類具有相同的接口或者基類,在子類比較固定并不需要擴(kuò)展時(shí),可以使用簡(jiǎn)單工廠。如數(shù)據(jù)庫生產(chǎn)工廠就是簡(jiǎn)單工廠的一個(gè)應(yīng)用
采用簡(jiǎn)單工廠的優(yōu)點(diǎn)是可以使用戶根據(jù)參數(shù)獲得對(duì)應(yīng)的類實(shí)例,避免了直接實(shí)例化類,降低了耦合性;缺點(diǎn)是可實(shí)例化的類型在編譯期間已經(jīng)被確定,如果增加新類 型,則需要修改工廠,不符合OCP(開閉原則)的原則。簡(jiǎn)單工廠需要知道所有要生成的類型,當(dāng)子類過多或者子類層次過多時(shí)不適合使用。

簡(jiǎn)單工廠模式實(shí)現(xiàn)

下面考慮《大話設(shè)計(jì)模式》中的一個(gè)例子:
題目:用任意一種面向?qū)ο笳Z言實(shí)現(xiàn)一個(gè)計(jì)算器控制臺(tái)程序。要求輸入兩個(gè)數(shù)和運(yùn)算符號(hào),得到結(jié)果。

題目分析:

程序應(yīng)該做到:(1)可維護(hù);(2)可復(fù)用;(3)可擴(kuò)展;(4)靈活性好。
可維護(hù):就是說代碼一處更改,不能產(chǎn)生連鎖反應(yīng),不能影響其他地方。
可復(fù)用:盡量減少重復(fù)性代碼。
可擴(kuò)展:如果要擴(kuò)展新的功能、新的業(yè)務(wù),則只需要增加新的類就好了,不對(duì)已有的類和邏輯產(chǎn)生影響。插拔式的應(yīng)用。
面向?qū)ο笠c(diǎn):
面向?qū)ο笕筇匦裕悍庋b、繼承、多態(tài)。
通過封裝、繼承、多態(tài)把程序耦合降低。
業(yè)務(wù)邏輯和界面邏輯分開。

類的結(jié)構(gòu)圖:


代碼實(shí)現(xiàn):

1. 首先,搞清楚業(yè)務(wù)中容易發(fā)生變化的部分。在本應(yīng)用中,要求計(jì)算兩個(gè)數(shù)的運(yùn)算結(jié)果,那么要進(jìn)行什么樣的運(yùn)算,這就是一個(gè)容易發(fā)生變化的部分。例如,我們現(xiàn)在只想實(shí)現(xiàn)加減乘除運(yùn)算,后期又想增加開根或者求余運(yùn)算。那么如何應(yīng)對(duì)這種需求帶來的變化。在程序設(shè)計(jì)的時(shí)候就應(yīng)該考慮到程序的可維護(hù)性、可擴(kuò)展性、代碼的可復(fù)用性、靈活性等等。

2. 例如現(xiàn)在這個(gè)運(yùn)算器只有加減乘除四種運(yùn)算。首先建一個(gè)Operation類,這個(gè)類是各種具體運(yùn)算類(加減乘除)的父類,主要是接受用戶輸入的數(shù)值。該類如下:

class Operation(): 
 def __init__(self,NumberA=0,NumberB=0): 
 self.NumberA = NumberA 
 self.NumberB = NumberB 
 
 def GetResult(self): 
 pass

3. 然后是具體的運(yùn)算類:Add、Sub、Mul、p。他們都繼承了Operation類,并且重寫了getResult()方法。這樣就可以用多態(tài)性降低不同業(yè)務(wù)邏輯的耦合度,修改任何一種運(yùn)算類都不會(huì)影響其他的運(yùn)算類。具體類的代碼如下:

class AddOp(Operation): 
 def GetResult(self): 
 return self.NumberB + self.NumberA 
 
class MinusOp(Operation): 
 def GetResult(self): 
 return self.NumberA - self.NumberB 
 
class MultiOp(Operation): 
 def GetResult(self): 
 return self.NumberA * self.NumberB 
 
class pideOp(Operation): 
 def GetResult(self): 
 try: 
 return 1.0*self.NumberA / self.NumberB 
 except ZeropisionError: 
 raise

4. 那么如何讓計(jì)算器知道我是要用哪一種運(yùn)算呢?也就是說到底要實(shí)例化哪一個(gè)具體的運(yùn)算類,Add?Sub?Mul?p?這時(shí)就應(yīng)該考慮用 一個(gè)單獨(dú)的類來做這個(gè)創(chuàng)造具體實(shí)例的過程,這個(gè)類就是工廠類。如下:

class OperationFatory(): 
 def ChooseOperation(self,op): 
 if op == '+': 
 return AddOp() 
 if op == '-': 
 return MinusOp() 
 if op == '*': 
 return MultiOp() 
 if op == '/': 
 return pideOp()

5. 這樣,用戶只要輸入運(yùn)算符,工廠類就可以創(chuàng)建合適的實(shí)例,通過多態(tài)性,即返回給父類的方式實(shí)現(xiàn)運(yùn)算結(jié)果。客戶端代碼如下:

if __name__ == '__main__': 
 ch = '' 
 while not ch=='q': 
 NumberA = eval(raw_input('Please input number1: ')) 
 op = str(raw_input('Please input the operation: ')) 
 NumberB = eval(raw_input('Please input number2: ')) 
 OPFactory = OperationFatory() 
 OPType = OPFactory.ChooseOperation(op) 
 OPType.NumberA = NumberA 
 OPType.NumberB = NumberB 
 print 'The result is:',OPType.GetResult() 
 print '
#-- input q to exit any key to continue' 
 try: 
 ch = str(raw_input()) 
 except: 
 ch = ''

完整版代碼如下:

# -*-coding:UTF-8-*- 
from abc import ABCMeta,abstractmethod 
 
class Operation(): 
 def __init__(self,NumberA=0,NumberB=0): 
 self.NumberA = NumberA 
 self.NumberB = NumberB 
 
 def GetResult(self): 
 pass 
 
class AddOp(Operation): 
 def GetResult(self): 
 return self.NumberB + self.NumberA 
 
class MinusOp(Operation): 
 def GetResult(self): 
 return self.NumberA - self.NumberB 
 
class MultiOp(Operation): 
 def GetResult(self): 
 return self.NumberA * self.NumberB 
 
class pideOp(Operation): 
 def GetResult(self): 
 try: 
 return 1.0*self.NumberA / self.NumberB 
 except ZeropisionError: 
 raise 
 
class OperationFatory(): 
 def ChooseOperation(self,op): 
 if op == '+': 
 return AddOp() 
 if op == '-': 
 return MinusOp() 
 if op == '*': 
 return MultiOp() 
 if op == '/': 
 return pideOp() 
 
if __name__ == '__main__': 
 ch = '' 
 while not ch=='q': 
 NumberA = eval(raw_input('Please input number1: ')) 
 op = str(raw_input('Please input the operation: ')) 
 NumberB = eval(raw_input('Please input number2: ')) 
 OPFactory = OperationFatory() 
 OPType = OPFactory.ChooseOperation(op) 
 OPType.NumberA = NumberA 
 OPType.NumberB = NumberB 
 print 'The result is:',OPType.GetResult() 
 print '
#-- input q to exit any key to continue' 
 try: 
 ch = str(raw_input()) 
 except: 
 ch = ''

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

python版簡(jiǎn)單工廠模式的介紹

什么是簡(jiǎn)單工廠模式;工廠模式有一種非常形象的描述,建立對(duì)象的類就如一個(gè)工廠,而需要被建立的對(duì)象就是一個(gè)個(gè)產(chǎn)品;在工廠中加工產(chǎn)品,使用產(chǎn)品的人,不用在乎產(chǎn)品是如何生產(chǎn)出來的。從軟件開發(fā)的角度來說,這樣就有效的降低了模塊之間的耦合。簡(jiǎn)單工廠的作用是實(shí)例化對(duì)象,而不需要客戶了解這個(gè)對(duì)象屬于哪個(gè)具體的子類。簡(jiǎn)單工廠實(shí)例化的類具有相同的接口或者基類,在子類比較固定并不需要擴(kuò)展時(shí),可以使用簡(jiǎn)單工廠。如數(shù)據(jù)庫生產(chǎn)工廠就是簡(jiǎn)單工廠的一個(gè)應(yīng)用。
推薦度:
標(biāo)簽: 模式 介紹 簡(jiǎn)單的
  • 熱門焦點(diǎn)

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 久久久久久久99久久久毒国产 | 欧美高清视频在线观看 | 九九久久国产 | 国产高清视频在线观看 | 国产三级一区 | 亚洲欧美日韩精品高清 | 亚洲欧美一区二区三区 | 欧美一区二区三区香蕉视 | 成人a毛片久久免费播放 | a级毛片在线播放 | 亚洲欧美日韩在线观看播放 | 欧美视频免费在线 | 亚洲欧美综合视频 | 久国产 | 国产精品视频久久久久 | 热综合一本伊人久久精品 | 国产精品久久久久久久牛牛 | 免费国产小视频在线观看 | 国产97在线观看 | 欧美日韩欧美日韩 | 久久久高清国产999尤物 | 欧美在线观看日韩欧美在线观看 | 欧美xxxbbb| 亚洲另类第一页 | 免费国产va在线观看视频 | 成人国产激情福利久久精品 | 亚洲欧美日韩中文字幕在线不卡 | 免费一看一级毛片全播放 | 国产最新进精品视频 | 欧美 亚洲 中文字幕 | 国产一区二区高清视频 | 精品国产一区二区三区香蕉 | 欧美亚洲另类视频 | 欧美日韩国产在线观看 | 国产啪视频 | 中文国产成人精品久久一 | 五月天婷婷视频在线观看 | 国产高清一区二区三区视频 | 国产精品免费看 | 精品国产91久久久久 | 韩国理论三级在线观看视频 |