国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > Python > 正文

Python筆記之代理模式

2024-09-09 19:02:53
字體:
供稿:網(wǎng)友

代理通常就是一個介于尋求方和提供方之間的中介系統(tǒng)。其核心思想就是客戶端(尋求方)沒有直接和提供方(真實(shí)對象)打交道,而是通過代理對象來完成提供方提供的資源或操作。

代理其實(shí)就是封裝實(shí)際服務(wù)對象的包裝器或代理人。代理可以為其包裝的對象提供附加功能,而無需改變此對象的代碼。代理模式的主要目的是為其他對象提供一個代理者或占位符,從而控制對實(shí)際對象的訪問。

三種常見的不同類型或不同應(yīng)用場景下的代理:

虛擬代理:如果一個對象實(shí)例化后會占用大量的內(nèi)存,可以先利用占位符表示,只有當(dāng)客戶端請求或訪問這個對象時才會創(chuàng)建實(shí)際的對象。 遠(yuǎn)程代理:給位于遠(yuǎn)程服務(wù)器或不同地址空間上的實(shí)際對象提供了本地表示。例如應(yīng)用程序可能需要獲取不同服務(wù)器或空間地址上的對象信息,這時候就可以通過一個本地的代理來獲取相關(guān)信息,而不需要直接去和各個服務(wù)器或空間地址上的對象“打交道”。 保護(hù)代理:通過代理來訪問真正的對象,訪問時,代理則檢查和控制來自客戶端的請求權(quán)限、認(rèn)證、授權(quán)等,從而保護(hù)了真正的實(shí)際對象。

代理模式注意點(diǎn):

客戶端實(shí)際上可以直接訪問真實(shí)對象以得到自己想要的結(jié)果,但是使用代理也會有許多優(yōu)勢,就如同它的名字“代理”,是可以進(jìn)行代理的,但是具體的使用還是需要根據(jù)具體情況而定。 代理是可以根據(jù)需要在代理的接口中添加額外的操作的,但需要注意的是這些額外的操作不要變成了“累贅”。 由于代理相當(dāng)于是給真實(shí)對象進(jìn)行了一層封裝,所以可能會增加一定的耗時。

簡單示例:

from abc import ABCMeta, abstractmethodclass HouseOwner(metaclass=ABCMeta):  """房主抽象類:都可以將房子出租"""  @abstractmethod  def rent_house(self, rental):    passclass Landlord(HouseOwner):  """真實(shí)對象:房主"""  def __init__(self):    self.account = 0    self.house_key = 'house key'  def rent_house(self, rental):    """收取租金,并房屋鑰匙給出租的人"""    self.account += rental    return self.house_keyclass HouseAgent:  """代理類:中介,代理房東出租他們的房子"""  def __init__(self):    self.account = 0    self.house_resource = []    # 房源肯定不只一個,這里就只簡單放一個了    self.house_resource.append(Landlord())  # 通常而言,代理類和表示真實(shí)對象的類具有相同的接口  # 表示此方法給真實(shí)對象某個操作進(jìn)行的代理操作  def rent_house(self, rental, agency_fee):    """收取租金和中介費(fèi),并將房子出租給客戶"""    self.account += agency_fee    house_key = self.house_resource[0].rent_house(rental)    return house_keyclass Renter:  """客戶端類:租戶"""  def __init__(self):    self.account = 10000    self.house_key = None    self.house_agent = HouseAgent()  def find_house(self):    """在某一個中介(代理對象)處出租房子"""    self.house_key = self.house_agent.rent_house(3000, 1000)    print("You've rented a house!")if __name__ == '__main__':  renter = Renter()  renter.find_house()

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)之家。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 浦江县| 安义县| 吴江市| 习水县| 七台河市| 蛟河市| 本溪市| 云浮市| 盐亭县| 曲沃县| 罗甸县| 林口县| 乌兰县| 商都县| 页游| 大足县| 万山特区| 郧西县| 荆门市| 杨浦区| 东辽县| 鹤峰县| 萨迦县| 贵溪市| 五峰| 洪江市| 天长市| 天门市| 商河县| 水富县| 扎囊县| 临颍县| 古丈县| 阿城市| 杭锦后旗| 哈尔滨市| 桑植县| 潼关县| 中超| 定远县| 开鲁县|