-
Notifications
You must be signed in to change notification settings - Fork 0
/
proxy_pattern.py
76 lines (39 loc) · 1.22 KB
/
proxy_pattern.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
'''
代理模式
1、远程代理:代理远程对象,让客户端感觉象是在使用本地对象一样方便。
2、虚拟代理:代理中保存那些创建时需要很消耗资源的对象。
3、安全代理:在代理中进行安全验证。
'''
import abc
class Request(abc.ABC):
"""定义请求方法的接口类。"""
@abc.abstractmethod
def request_a(self):
pass
@abc.abstractmethod
def request_b(self):
pass
class RealObject(Request):
"""真实操作对象,共同实现 Request 接口。"""
def request_a(self):
print('真实请求 a')
def request_b(self):
print('request real object b')
class Proxy(Request):
'''代理对象,共同实现 Request 接口。'''
real_object = None
def request_a(self):
if self.real_object == None:
print('create real object.')
self.real_object = RealObject()
# 在代理中可作安全验证等。
self.real_object.request_a()
def request_b(self):
if self.real_object == None:
print('create real object.')
self.real_object = RealObject()
self.real_object.request_b()
if __name__ == '__main__':
proxy = Proxy()
proxy.request_a() # 客户端直接使用代理即可,不需要知道真实对象。
proxy.request_b()