結構型模式代理模式

      網友投稿 771 2022-05-25

      代理模式

      為另一個對象提供一個代理或占位者,來控制對該對象的訪問。

      意圖

      確保類有且只有一個對象被創建

      為對象提供一個訪問點,以使程序可以全局訪問對象

      控制共享資源的并行訪問

      結構型模式之代理模式

      優點

      代理模式在客戶端與目標對象之間起到一個中介作用和保護目標對象的作用;

      代理對象可以擴展目標對象的功能;

      代理模式能將客戶端與目標對象分離,在一定程度上降低了系統的耦合度,增加了程序的可擴展性

      實現

      1.抽象主題(Subject)類

      通過接口或抽象類聲明真實主題和代理對象實現的業務方法。

      from abc import ABCMeta, abstractmethod class Payment(metaclass=ABCMeta): @abstractmethod def do_play(self): pass

      2.真實主題(Real Subject)類

      實現了抽象主題中的具體業務,是代理對象所代表的真實對象,是最終要引用的對象。

      class Bank(Payment): def __init__(self): self.card = None self.account = None def __getAccount(self): # 簡化, 卡號就是賬戶號 self.account = self.card return self.account def __hasFunds(self): # 簡化,賬戶號就是金錢數 funds = int(self.__getAccount()) if funds > 1000: print("Bank:: Checking if Account", self.__getAccount(), "has enough funds") return True else: print("Bank:: Checking if Account", self.__getAccount(), "has not enough funds") return False def setCard(self, card): self.card = card def do_play(self): if self.__hasFunds(): print("Bank:: Paying the merchant") return True else: print("Bank:: Sorry, not enough funds!") return False

      3.代理(Proxy)類

      提供了與真實主題相同的接口,其內部含有對真實主題的引用,它可以訪問、控制或擴展真實主題的功能。

      class DebitCard(Payment): def __init__(self): self.bank = Bank() def do_play(self): card = input("Proxy: Punch in card Number") self.bank.setCard(card) return self.bank.do_play()

      3.客戶端類

      class LiDogEag: def __init__(self): print("You:: lets buy the Denim shirt!") self.debitCard = DebitCard() self.isPurchased = None def make_payment(self): self.isPurchased = self.debitCard.do_play() def __del__(self): if self.isPurchased: print('You:: Wow!,Denim shirt is Mine!') else: print("You:: I should earn more. 555...") You = LiDogEag() You.make_payment()

      李狗蛋(客戶端)去商場買牛仔衫,現金不夠付款(抽象主題類),但是銀行(真實主題類)取錢又太遠,于是他使用信用卡(代理類)代付,如果賬戶前足夠則付款成功得到牛仔衫,不夠則無法購買。

      缺點

      代理模式會造成系統設計中類的數量增加

      在客戶端和目標對象之間增加一個代理對象,會造成請求處理速度變慢;

      增加了系統的復雜度;

      應用

      遠程代理,這種方式通常是為了隱藏目標對象存在于不同地址空間的事實,方便客戶端訪問。例如,用戶申請某些網盤空間時,會在用戶的文件系統中建立一個虛擬的硬盤,用戶訪問虛擬硬盤時實際訪問的是網盤空間。

      虛擬代理,這種方式通常用于要創建的目標對象開銷很大時。例如,下載一幅很大的圖像需要很長時間,因某種計算比較復雜而短時間無法完成,這時可以先用小比例的虛擬代理替換真實的對象,消除用戶對服務器慢的感覺。

      安全代理,這種方式通常用于控制不同種類客戶對真實對象的訪問權限。

      智能指引,主要用于調用目標對象時,代理附加一些額外的處理功能。例如,增加計算真實對象的引用次數的功能,這樣當該對象沒有被引用時,就可以自動釋放它。

      延遲加載,指為了提高系統的性能,延遲對目標的加載。例如,Hibernate 中就存在屬性的延遲加載和關聯表的延時加載。

      虛擬化

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:win7 powershell版本過低問題
      下一篇:理工男生資源達人的夢想,樹莓派低成本創造私人專屬互聯網的構想及實現
      相關文章
      国产亚洲精品国看不卡| 亚洲国产日韩在线人成下载| 国产亚洲国产bv网站在线 | 亚洲av无码潮喷在线观看| 在线观看亚洲精品福利片| 亚洲精品白浆高清久久久久久| 亚洲精品第一国产综合境外资源| 精品亚洲视频在线| 在线观看亚洲网站| 亚洲AV无码不卡在线观看下载| 亚洲AV无码一区二区三区鸳鸯影院 | www亚洲一级视频com| 综合偷自拍亚洲乱中文字幕| 人人狠狠综合久久亚洲| 韩国亚洲伊人久久综合影院| 国产亚洲福利精品一区二区| 亚洲av再在线观看| 亚洲欧洲精品成人久久曰影片| 亚洲视频在线一区二区| 亚洲一区二区视频在线观看| 亚洲午夜激情视频| 亚洲精品蜜桃久久久久久| 亚洲成A人片在线观看无码不卡| 亚洲AV成人片色在线观看| 久久精品国产亚洲av水果派| 亚洲福利一区二区精品秒拍| 亚洲国产综合人成综合网站00| 亚洲一区二区三区免费在线观看 | 亚洲校园春色小说| 亚洲sss综合天堂久久久| 亚洲人成未满十八禁网站| 久久精品国产亚洲AV电影网| 亚洲av午夜成人片精品电影 | 亚洲国产模特在线播放| 在线观看亚洲AV日韩AV| 亚洲AV无码精品国产成人| 亚洲精品国产综合久久一线| 亚洲日韩乱码中文无码蜜桃臀网站| 亚洲Av无码专区国产乱码DVD| 色拍自拍亚洲综合图区| 亚洲国产成人精品激情|