Python設計模式之代理模式實例
基于面向過程實現(xiàn)的代理模式
下面是一段體現(xiàn)該設計模式中心的面向過程的python代碼:
def hello():
print 'hi, i am hello'
def proxy():
print 'prepare....'
hello()
print 'finish....'
if __name__ == '__main__':
proxy()
運行結果:
prepare....
hi, i am hello
finish....
有沒有想到裝飾器?
基于面向?qū)ο髮崿F(xiàn)的代理模式
class AbstractSubject(object):
def __init__(self):
pass
def request(self):
pass
class RealSubject(AbstractSubject):
def __init__(self):
pass
def request(self):
print 'hi, i am RealSubject'
class ProxySubject(AbstractSubject):
def __init__(self):
self.__rs = RealSubject()
def request(self):
self.__beforeRequest()
self.__rs.request()
self.__afterRequest()
def __beforeRequest(self):
print 'prepare....'
def __afterRequest(self):
print 'finish....'
if __name__ == '__main__':
subject = ProxySubject()
subject.request()
如果RealSubject的初始化函數(shù)init有參數(shù),代理類ProxySubject可以作兩種方式的修改: 第一種: ProxySubject的init方法同樣也有參數(shù),初始化代理類的時候?qū)⒊跏蓟瘏?shù)傳遞給RealSubject。 第二種: 將ProxySubject的init方法改為:
def __init__(self):
self.__rs = None
將ProxySubject的request方法改為:
def request(self, *args, **kwargs):
if self.__rs == None:
self.__rs = RealSubject(*args, **kwargs)
self.__beforeRequest()
self.__rs.request()
self.__afterRequest()
的類似形式。
相關文章
Python 調(diào)用Anthropic API 的兩種方式
本文介紹了Python調(diào)用Anthropic API的兩種主要方式,包括使用requests庫和官方SDK,下面就來詳細的介紹一下具體調(diào)用方法,感興趣的可以了解一下2025-12-12
python pands實現(xiàn)execl轉csv 并修改csv指定列的方法
今天小編就為大家分享一篇python pands實現(xiàn)execl轉csv 并修改csv指定列的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-12-12
使用Python對Excel表內(nèi)容進行中文提取的示例代碼
本項目是基于Tkinter的圖形界面應用程序,用于從Excel文件中提取符合特定正則表達式模式(默認提取中文)的文本內(nèi)容,并將結果輸出到指定列或新文件中,感興趣的小伙伴跟著小編一起來看看吧2025-11-11
聊聊python dropna()和notnull()的用法區(qū)別
這篇文章主要介紹了聊聊python dropna()和notnull()的用法區(qū)別,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03

