中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python怎么實現抽象工廠模式

發布時間:2022-01-13 16:32:20 來源:億速云 閱讀:123 作者:iii 欄目:大數據

這篇文章主要介紹“Python怎么實現抽象工廠模式”,在日常操作中,相信很多人在Python怎么實現抽象工廠模式問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Python怎么實現抽象工廠模式”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

實 現

2) 創建產品 AbstractFactory僅聲明一個創建產品的接口 ,真正創建產品是由
ConcreteProduct子類實現的。最通常的一個辦法是為每一個產品定義一個工廠方法(參見Factory Method(3 . 3))。一個具體的工廠將為每個產品重定義該工廠方法以指定產品。雖然這樣的實現很簡單,但它卻要求每個產品系列都要有一個新的具體工廠子類,即使這些產品系列的差別很小。

如果有多個可能的產品系列,具體工廠也可以使用Prototype(3.4)模式來實現。具體工廠使用產品系列中每一個產品的原型實例來初始化,且它通過復制它的原型來創建新的產品。在基于原型的方法中,使得不是每個新的產品系列都需要一個新的具體工廠類。

接下來本來是Smalltalk中原型生成對象的例子,這里省略。Smalltalk是一種神奇的語言,需要面向對象的經典書籍都會提到它,但是卻沒見過哪里真正用到。我們還是提供一個C++的例子。照例先看類圖:

Python怎么實現抽象工廠模式

CustomThemeFactory讀取保存在文件中主題信息并生成原型。

Python怎么實現抽象工廠模式

當createWindow和createScrollbar被調用時,代碼分別從CustomWindow,CustomScrollbar克隆出具體的產品。通過指定不同的文件,我們可以產生任意組產品。


3) 定義可擴展的工廠 AbstractFactory通常為每一種它可以生產的產品定義一個操作。產品的種類被編碼在操作型構中。增加一種新的產品要求改變 AbstractF actory的接口以及所有與它相關的類。一個更靈活但不太安全的設計是給創建對象的操作增加一個參數。該參數指定了將被創建的對象的種類。它可以是一個類標識符、一個整數、一個字符串,或其他任何可以標識這種產品的東西。實際上使用這種方法, AbstractFactory只需要一個“Make”操作和一個指示要創建對象的種類的參數。這是前面已經討論過的基于原型的和基于類的抽象工廠
的技術。
C + +這樣的靜態類型語言與相比,這一變化更容易用在類似于Smalltalk這樣的動態類型語言中。僅當所有對象都有相同的抽象基類,或者當產品對象可以被請求它們的客戶安全的強制轉換成正確類型時,你才能夠在 C + +中使用它。Factory Method(3.3)的實現部分說明了怎樣在C + +中實現這樣的參數化操作。

該方法即使不需要類型強制轉換,但仍有一個本質的問題:所有的產品將返回類型所給定的相同的抽象接口返回給客戶。客戶將不能區分或對一個產品的類別進行安全的假定。如果一個客戶需要進行與特定子類相關的操作,而這些操作卻不能通過抽象接口得到。雖然客戶可以實施一個向下類型轉換(downcast)(例如在C + +中用dynamic_cast),但這并不總是可行或安全的,因為向下類型轉換可能會失敗。這是一個典型的高度靈活和可擴展接口的權衡折衷。

這一部分可以選擇在學習了Factory Method模式之后再來重新理解。但是有一點可以肯定的是:當我們需要完成多個類似功能的時候,使用參數區分功能還是直接編寫多個函數,絕對是程序員煩惱的源頭之一。折衷也好,權衡也好,妥協也好,意思都差不多。

到此,關于“Python怎么實現抽象工廠模式”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

鱼台县| 图们市| 饶阳县| 句容市| 承德县| 什邡市| 曲沃县| 桃园县| 汕尾市| 丰镇市| 壶关县| 宿松县| 邵东县| 通山县| 河源市| 北碚区| 韶山市| 开化县| 枞阳县| 高碑店市| 昌江| 双桥区| 福州市| 西乌珠穆沁旗| 苍梧县| 叶城县| 镇安县| 大竹县| 谷城县| 霍州市| 施甸县| 黄冈市| 河北省| 邵阳市| 延津县| 庄浪县| 土默特右旗| 利川市| 贵南县| 奎屯市| 双江|