<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題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關鍵字專題關鍵字專題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
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        python版簡單工廠模式的介紹

        來源:懂視網 責編:小OO 時間:2020-11-27 14:13:20
        文檔

        python版簡單工廠模式的介紹

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

        什么是簡單工廠模式

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

        簡單工廠模式實現

        下面考慮《大話設計模式》中的一個例子:
        題目:用任意一種面向對象語言實現一個計算器控制臺程序。要求輸入兩個數和運算符號,得到結果。

        題目分析:

        程序應該做到:(1)可維護;(2)可復用;(3)可擴展;(4)靈活性好。
        可維護:就是說代碼一處更改,不能產生連鎖反應,不能影響其他地方。
        可復用:盡量減少重復性代碼。
        可擴展:如果要擴展新的功能、新的業務,則只需要增加新的類就好了,不對已有的類和邏輯產生影響。插拔式的應用。
        面向對象要點:
        面向對象三大特性:封裝、繼承、多態。
        通過封裝、繼承、多態把程序耦合降低。
        業務邏輯和界面邏輯分開。

        類的結構圖:


        代碼實現:

        1. 首先,搞清楚業務中容易發生變化的部分。在本應用中,要求計算兩個數的運算結果,那么要進行什么樣的運算,這就是一個容易發生變化的部分。例如,我們現在只想實現加減乘除運算,后期又想增加開根或者求余運算。那么如何應對這種需求帶來的變化。在程序設計的時候就應該考慮到程序的可維護性、可擴展性、代碼的可復用性、靈活性等等。

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

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

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

        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. 那么如何讓計算器知道我是要用哪一種運算呢?也就是說到底要實例化哪一個具體的運算類,Add?Sub?Mul?p?這時就應該考慮用 一個單獨的類來做這個創造具體實例的過程,這個類就是工廠類。如下:

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

        5. 這樣,用戶只要輸入運算符,工廠類就可以創建合適的實例,通過多態性,即返回給父類的方式實現運算結果。客戶端代碼如下:

        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 = ''

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        python版簡單工廠模式的介紹

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

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲国产一区明星换脸| 久久不见久久见免费影院| 国产成人亚洲精品91专区手机| 亚洲精品国产高清在线观看| 成在人线AV无码免费| 亚洲AV永久无码精品一福利| 国产精品四虎在线观看免费| 男女超爽视频免费播放| 四虎亚洲国产成人久久精品 | 免费精品国产自产拍在线观看图片| 亚洲成在人天堂在线| 1000部禁片黄的免费看| 亚洲国产精品久久久久秋霞影院 | 日本无吗免费一二区| 国产亚洲精品第一综合| 亚洲国产一成久久精品国产成人综合| yellow视频免费在线观看| 亚洲成色在线综合网站| 99re免费在线视频| 97久久国产亚洲精品超碰热| 国产在线播放免费| a毛看片免费观看视频| 亚洲色图综合网站| 日韩在线看片免费人成视频播放| 日本一区二区在线免费观看 | 亚洲另类春色国产精品| 国产免费卡一卡三卡乱码| 国产日韩久久免费影院| 亚洲国产成人手机在线电影bd| 妞干网免费视频在线观看| 夜夜爽妓女8888视频免费观看| 亚洲AV无码久久精品狠狠爱浪潮| 成人免费视频69| eeuss影院ss奇兵免费com| 2022年亚洲午夜一区二区福利| 毛片免费在线观看网址| 国产精品永久免费| 亚洲乱码卡三乱码新区| 亚洲午夜福利精品久久| 久草视频在线免费| 中文字幕不卡免费视频|