1. 程式人生 > >設計模式之:代理模式

設計模式之:代理模式

前言

代理模式的本質就是隱藏真實角色資訊,實現間接接觸。比如我們平常在租房時會找中介,中介就相當於一個代理,房東和租戶直接聯絡的都是中介。

代理模式有3個必要的元素:

  • 真實的物件(執行業務邏輯,被代理的物件)
  • 代理類(使用者請求的一個介面,對真實目標的保護)
  • 使用者(獲取任務的使用者請求)

 

代理模式的應用場景:

1.遠端代理:也就是為一個物件在不同的地址空間提供區域性代表。這樣可以隱藏一個物件存在於不同地址空間的事實。

2.虛擬代理:是根據需要建立開銷大的物件。通過它來存放例項化需要很長時間的真實物件,例如html中,圖片需要load很久,所以通過虛擬代理來代替真實的圖片

3.安全代理:用來控制真實物件訪問時的許可權

程式碼 :

'''代理模式'''
#本質:隱藏真實角色資訊,實現間接接觸
from abc import abstractmethod
class FemaleA():
      def __init__(self,name):
            self.name = name

class Male():
      @abstractmethod
      def send_flower(self):
            pass
      
      @abstractmethod
      def send_choclate(self):
            pass
      
      @abstractmethod
      def send_book(self):
            pass
      
class Male_hidden(Male):
      def __init__(self,name,love_female):
            self.name = name
            self.love_female = FemaleA(love_female)

      def send_flower(self):
            print("%s送花給%s"%(self.name,self.love_female.name))

      def send_choclate(self):
            print("%s送巧克力給%s"%(self.name,self.love_female.name))

      def send_book(self):
            print("%s送書給%s"%(self.name,self.love_female.name))

class Proxy(Male):
      '''代理類,同時擁有真實物件和使用者的資訊'''
      def __init__(self,name,proxyed_name,love_female):
            self.name = name
            self.proxyed = Male_hidden(proxyed_name,love_female)

      def send_flower(self):
            self.proxyed.send_flower()

      def send_choclate(self):
            self.proxyed.send_choclate()

      def send_book(self):
            self.proxyed.send_book()

if __name__ == "__main__":
      p = Proxy('張三','李四','美女')
      p.send_flower()
      p.send_choclate()
      p.send_book()

執行結果: 

最終執行的還是真實角色的方法,只是呼叫者是看不到的,實現了真實角色資訊的隱藏。 

參考連線:

https://www.cnblogs.com/Xjng/p/3878839.html