大话设计模式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/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

posted @ 2017-11-02 11:27  Andy冉明  阅读(1556)  评论(0编辑  收藏  举报