Proxy(代理) — 对象结构型模式
为其他对象提供一种代理以控制对这个对象的访问。
适用场景
- 在需要用比较通用和复杂的对象指针代替简单的指针的时候,使用 Proxy 模式。
基本组成
代理模式一般由以下三种组成:
抽象类:抽象类的主要职责是声明代理类与被代理类的共同接口方法,该类可以是接口也可以是抽象类。
被代理类:该类定义了代理类所表示的实际对象,是负责执行系统真正的逻辑业务对象。
代理类:其内部持有实际对象的引用,因此具备完全的队实际对象的代理权。客户端调用代理对象的方法,同时也调用被代理对象的方法,但是会在代理对象前后增加一些处理代码。
UML图
效果
Proxy 模式在访问对象时引入了一定程度的间接性。
实现
class AbstractText(object):
def print(self):
pass
class TextA(AbstractText):
def print(self):
print("hello world")
class TextProxy(AbstractText):
def __init__(self, text):
self.text = text
def print(self):
print("before print...")
self.text.print()
print("after print....")
client
def f(text : AbstractText):
text.print()
if __name__ == "__main__":
texta = TextA()
text = TextProxy(texta)
f(text)
"""
output:
before print...
hello world
after print....
"""