若想用一个对象来代表另一个对象,则可使用”代理模式”。
一般来说代理模式可以用于以下场合:
1. 远程代理,用本地对象来代表远程对象。RPyC程序库就是个很好的例子,它可以在服务器端创建对象,并在一台或多台客户端中创建针对这些对象的代理
2. 虚拟代理,用来创建能够代表复杂对象的轻量级对象,只有确有必要时才会真正去创建那些复杂对象。
3. 安全代理,可根据客户端的访问权限来确定不同的访问级别。
4. 智能引用,可用来在”访问对象时执行额外操作”。
现在让我们考虑这么一个情景,验证用户是否有足够的访问权限
#!/usr/bin/env python
# encoding:utf-8
class User(object):
def __init__(self, name, authority):
self.name = name
self.authority = authority
class UserProxy(object):
def __init__(self, user):
self.user = user
def verify(self):
if self.user.authority == 1:
print self.user.name, '可访问'
else:
print self.user.name, '不可访问'
def main():
user1 = UserProxy(User('xxx', 1))
user2 = UserProxy(User('yyy', 0))
user1.verify()
user2.verify()
if __name__ == '__main__':
main()