若想用一個對象來代表另一個對象,則可使用”代理模式”。
一般來說代理模式可以用於以下場合:
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()