設計模式之:代理模式
阿新 • • 發佈:2018-12-25
前言
代理模式的本質就是隱藏真實角色資訊,實現間接接觸。比如我們平常在租房時會找中介,中介就相當於一個代理,房東和租戶直接聯絡的都是中介。
代理模式有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()
執行結果:
最終執行的還是真實角色的方法,只是呼叫者是看不到的,實現了真實角色資訊的隱藏。
參考連線: