大話設計模式Python實現-代理模式


代理模式(Proxy Pattern):為其他對象提供一種代理以控制對這個對象的訪問

 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 
 4 __author__ = 'Andy'
 5 
 6 """
 7 大話設計模式
 8 設計模式——代理模式
 9 代理模式(Proxy Pattern):為其他對象提供一種代理以控制對這個對象的訪問
10 實現:戴勵 替 卓賈易 送禮物給 嬌嬌
11 模型:
12 #公共接口類
13 class InterFace:
14     def request(self):
15         pass
16 #真實類
17 class RealSubject(InterFace):
18     def request(self):
19         print 'RealSubject request'
20 #代理類 調用真實類的內部方法
21 class ProxySubject(InterFace)
22     def request(self):
23         self.real = RealSubject()
24         self.real.request()
25 """
26 
27 
28 # 送禮物接口
29 class GiveGift(object):
30     # 送洋娃娃
31     def GiveDolls(self):
32         pass
33 
34     # 送花
35     def GiveFlowers(self):
36         pass
37 
38     # 送巧克力
39     def GiveChocolate(self):
40         pass
41 
42 
43 # 被追求者類
44 class SchoolGirl(object):
45     def __init__(self, name):
46         self.name = name
47 
48 
49 # 追求者類
50 class Pursuit(GiveGift):
51     def __init__(self, Girl):
52         self.Girl = Girl
53 
54     def GiveDolls(self):
55         print self.Girl.name, '送你洋娃娃'
56 
57     def GiveFlowers(self):
58         print self.Girl.name, '送你花'
59 
60     def GiveChocolate(self):
61         print self.Girl.name, '送你巧克力'
62 
63 
64 # 代理類
65 class Proxy(GiveGift):
66     def __init__(self, Girl):
67         self.proxy = Pursuit(Girl)
68 
69     # 送洋娃娃
70     def GiveDolls(self):
71         self.proxy.GiveDolls()
72 
73     # 送花
74     def GiveFlowers(self):
75         self.proxy.GiveFlowers()
76 
77     # 送巧克力
78     def GiveChocolate(self):
79         self.proxy.GiveChocolate()
80 
81 
82 if __name__ == '__main__':
83     jiaojiao = SchoolGirl('jiaojiao')
84     daili = Proxy(jiaojiao)
85     daili.GiveDolls()
86     daili.GiveFlowers()
87     daili.GiveChocolate()

上面的類的設計如下圖: 

代理類Proxy引用代理的實體Pursite,提供與Pursite相同的接口來代替實體

 


作者:Andy
出處:http://www.cnblogs.com/onepiece-andy/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM