您好,登錄后才能下訂單哦!
這篇文章主要介紹“Python怎么實(shí)現(xiàn)抽象工廠模式”,在日常操作中,相信很多人在Python怎么實(shí)現(xiàn)抽象工廠模式問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Python怎么實(shí)現(xiàn)抽象工廠模式”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
實(shí) 現(xiàn)
2) 創(chuàng)建產(chǎn)品 AbstractFactory僅聲明一個(gè)創(chuàng)建產(chǎn)品的接口 ,真正創(chuàng)建產(chǎn)品是由
ConcreteProduct子類實(shí)現(xiàn)的。最通常的一個(gè)辦法是為每一個(gè)產(chǎn)品定義一個(gè)工廠方法(參見Factory Method(3 . 3))。一個(gè)具體的工廠將為每個(gè)產(chǎn)品重定義該工廠方法以指定產(chǎn)品。雖然這樣的實(shí)現(xiàn)很簡單,但它卻要求每個(gè)產(chǎn)品系列都要有一個(gè)新的具體工廠子類,即使這些產(chǎn)品系列的差別很小。
如果有多個(gè)可能的產(chǎn)品系列,具體工廠也可以使用Prototype(3.4)模式來實(shí)現(xiàn)。具體工廠使用產(chǎn)品系列中每一個(gè)產(chǎn)品的原型實(shí)例來初始化,且它通過復(fù)制它的原型來創(chuàng)建新的產(chǎn)品。在基于原型的方法中,使得不是每個(gè)新的產(chǎn)品系列都需要一個(gè)新的具體工廠類。
接下來本來是Smalltalk中原型生成對象的例子,這里省略。Smalltalk是一種神奇的語言,需要面向?qū)ο蟮慕?jīng)典書籍都會提到它,但是卻沒見過哪里真正用到。我們還是提供一個(gè)C++的例子。照例先看類圖:
CustomThemeFactory讀取保存在文件中主題信息并生成原型。
當(dāng)createWindow和createScrollbar被調(diào)用時(shí),代碼分別從CustomWindow,CustomScrollbar克隆出具體的產(chǎn)品。通過指定不同的文件,我們可以產(chǎn)生任意組產(chǎn)品。
3) 定義可擴(kuò)展的工廠 AbstractFactory通常為每一種它可以生產(chǎn)的產(chǎn)品定義一個(gè)操作。產(chǎn)品的種類被編碼在操作型構(gòu)中。增加一種新的產(chǎn)品要求改變 AbstractF actory的接口以及所有與它相關(guān)的類。一個(gè)更靈活但不太安全的設(shè)計(jì)是給創(chuàng)建對象的操作增加一個(gè)參數(shù)。該參數(shù)指定了將被創(chuàng)建的對象的種類。它可以是一個(gè)類標(biāo)識符、一個(gè)整數(shù)、一個(gè)字符串,或其他任何可以標(biāo)識這種產(chǎn)品的東西。實(shí)際上使用這種方法, AbstractFactory只需要一個(gè)“Make”操作和一個(gè)指示要創(chuàng)建對象的種類的參數(shù)。這是前面已經(jīng)討論過的基于原型的和基于類的抽象工廠
的技術(shù)。
C + +這樣的靜態(tài)類型語言與相比,這一變化更容易用在類似于Smalltalk這樣的動態(tài)類型語言中。僅當(dāng)所有對象都有相同的抽象基類,或者當(dāng)產(chǎn)品對象可以被請求它們的客戶安全的強(qiáng)制轉(zhuǎn)換成正確類型時(shí),你才能夠在 C + +中使用它。Factory Method(3.3)的實(shí)現(xiàn)部分說明了怎樣在C + +中實(shí)現(xiàn)這樣的參數(shù)化操作。
該方法即使不需要類型強(qiáng)制轉(zhuǎn)換,但仍有一個(gè)本質(zhì)的問題:所有的產(chǎn)品將返回類型所給定的相同的抽象接口返回給客戶??蛻魧⒉荒軈^(qū)分或?qū)σ粋€(gè)產(chǎn)品的類別進(jìn)行安全的假定。如果一個(gè)客戶需要進(jìn)行與特定子類相關(guān)的操作,而這些操作卻不能通過抽象接口得到。雖然客戶可以實(shí)施一個(gè)向下類型轉(zhuǎn)換(downcast)(例如在C + +中用dynamic_cast),但這并不總是可行或安全的,因?yàn)橄蛳骂愋娃D(zhuǎn)換可能會失敗。這是一個(gè)典型的高度靈活和可擴(kuò)展接口的權(quán)衡折衷。
這一部分可以選擇在學(xué)習(xí)了Factory Method模式之后再來重新理解。但是有一點(diǎn)可以肯定的是:當(dāng)我們需要完成多個(gè)類似功能的時(shí)候,使用參數(shù)區(qū)分功能還是直接編寫多個(gè)函數(shù),絕對是程序員煩惱的源頭之一。折衷也好,權(quán)衡也好,妥協(xié)也好,意思都差不多。
到此,關(guān)于“Python怎么實(shí)現(xiàn)抽象工廠模式”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。