PyPattyrn-一個簡單而有效的python庫,用於實現常見的設計模式
阿新 • • 發佈:2020-12-11
PyPattyrn是一個python軟體包,旨在使您更輕鬆,更快地將設計模式實現到您自己的專案中。
設計模式本質上不能直接轉換為程式碼,因為它們只是對如何解決特定問題的描述。但是,許多常見的設計模式都具有在該模式的所有實現中通用的樣板程式碼。該程式包捕獲了該通用程式碼並使其易於使用,因此您不必在所有專案中都自己編寫它。
設計模式
在軟體工程中, 設計模式是解決軟體設計中常見問題的通用可重複解決方案。設計模式不是可以直接轉換為程式碼的最終設計。它是關於如何解決可以在許多不同情況下使用的問題的描述或模板。
設計模式的用途
設計模式可以通過提供經過測試的,成熟的開發範例來加快開發過程。有效的軟體設計需要考慮可能直到實施稍後才能看到的問題。重用設計模式有助於防止可能引起重大問題的細微問題,並提高熟悉模式的編碼人員和架構師的程式碼可讀性。
通常,人們只瞭解如何將某些軟體設計技術應用於某些問題。這些技術很難應用於更廣泛的問題。設計模式提供了通用的解決方案,以不需要特定細節的格式記錄下來。
另外,模式允許開發人員使用眾所周知的,易於理解的名稱進行軟體互動。常見的設計模式可以隨著時間的流逝而得到改進,使其比臨時設計更健壯。
PyPattyrn程式碼示例
責任鏈模式
沿物件鏈傳遞請求,直到處理該請求。
frompypattyrn.behavioral.chainimportChain,ChainLinkclassConcreteChainLinkThree(ChainLink):#ThisobjectisaChainLink defhandle(self,request):#Implementthehandlemethod. ifrequest=='handle_three':return"Handledinchainlinkthree" else:returnself.successor_handle(request)#IfthisChainLinkcan'thandletherequest, #askitssuccessortohandleit. #(HasnosuccessorsowillraiseAttributeError) #(ThisexceptioniscaughtandwillcallaChainsfailmethod)classConcreteChainLinkTwo(ChainLink):#ThisobjectisaChainLink def__init__(self):#Overrideinittosetasuccessoroninitialization. super().__init__()#firstcallChainLinksinit self.set_successor(ConcreteChainLinkThree())#Setthesuccessorofthischainlink #toaConcreteChainLinkThreeinstance. defhandle(self,request):#Implementthehandlemethod. ifrequest=='handle_two':return"Handledinchainlinktwo" else:returnself.successor_handle(request)#IfthisChainLinkcan'thandlearequest #askitssuccessortohandleit #(theConcreteChainLinkThreeinstance).classConcreteChainLinkOne(ChainLink):#ThisobjectisaChainLink def__init__(self): super().__init__()self.set_successor(ConcreteChainLinkTwo())#SetthesuccessorofthisChainLink #toaConcreteChainLinkTwoinstance. defhandle(self,request):#Implementthehandlemethod. ifrequest=='handle_one':return"Handledinchainlinkone" else:returnself.successor_handle(request)#IfthisChainLinkcan'thandlearequest #askitssuccessortohandleit #(theConcreteChainLinkTwoinstance).classConcreteChain(Chain):#ThisobjectisaChain def__init__(self):#OverrideinittoinitializeaChainwiththestartingchainlink. super().__init__(ConcreteChainLinkOne())#InitializethisChainwithastartchainlink. #(aConcreteChainLinkOneinstance) deffail(self):#Implementthefailmethod,thisiscalledifnochainlinkscouldhandlearequest. return'Fail'chain=ConcreteChain()assert"Handledinchainlinkone"==chain.handle("handle_one")assert"Handledinchainlinktwo"==chain.handle("handle_two")assert"Handledinchainlinkthree"==chain.handle("handle_three")assert"Fail"==chain.handle('handle_four')
PyPattyrn安裝
pip install pypattyrn 或者下載pypattyrn的網盤備份版本