1. 代理模式(Proxy)介紹
UML類圖
角色介紹
- Subject類,通過接口或抽象類聲明真實角色實現的業務方法。
- Proxy類,實現抽象角色,是真實角色的代理,通過真實角色的業務邏輯方法來實現抽象方法,並可以附加自己的操作
- RealSubject,實現抽象角色,定義真實角色所要實現的業務邏輯,供代理角色調用
代理模式的適用場景 一個設計模式,只有當它有了應用場景,它才具備存在的價值。代理模式有很多可以使用的場景,主要分爲如下幾類:
- 遠程代理:爲一個對象的地址空間提供局部代表。
- 虛擬代理:根據需要來創建開銷較大的對象。
- 保護代理:用於對象應該具有不同訪問權限的場景,控制對原始對象的訪問。
- 智能指引:取代簡單的指針,它在訪問對象時執行一些附加操作。
2. 示例
"""Proxy Pattern with Python Code
"""
from abc import abstractmethod, ABCMeta
class Subject(metaclass=ABCMeta):
@abstractmethod
def Request(self):
pass
class RealSubject(Subject):
def Request(self):
print("Receive a request")
class Proxy(Subject):
def __init__(self):
self.subject = None
def Request(self):
self.subject = RealSubject()
self.subject.Request()
class Client(object):
def main(self):
p = Proxy()
p.Request()
if __name__ == '__main__':
Client().main()
輸出:
# ./Proxy.py
Receive a request
參考:
https://my.oschina.net/zhangjiawen/blog/480311
https://zhuanlan.zhihu.com/p/92051694