Python设计模式 - 代理模式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python设计模式 - 代理模式相关的知识,希望对你有一定的参考价值。

参考技术A """

代理模式(Proxy):为某个对象提供一种代理以控制对这个对象的访问。

注意:代理模式和策略模式的类图很相近,实现方法也是一样的,但是应用场景很不一样,体现了不同的思想。

    策略模式中同一外部对象访问上下文对象的操作一样,但是里面的策略对象不同。

    代理模式中不同的外部对象访问代理对象的操作一样,但是里面的真实对象是一样的。

代理模式在访问对象时引入一定程度的间接性,因为这种间接性,可以附加多种用途。

应用场景:

1、远程代理。为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实。

2、虚拟代理。当要创建耗时很长的对象时,可以使用虚拟代理。虚拟代理完成的工作为新建真实对象,并在新建的过程中给出提示。比如在网页加载图片的过程中,虚拟代理可以用一个图片框暂时替代真实的图片。

3、安全代理。用于控制真实对象访问是的权限。

4、智能指引。当调用真实的对象时,代理处理另外一些事情,比如计算真实对象的引用次数、是否锁定等等。

"""

import time

class SalesManager:

    def talk(self):

        print("销售经理准备谈")

class Proxy:

    def __init__(self):

        self.busy = 'No'

        self.sales = None

    def talk(self):

        print("代理检查销售经理的可访问性")

        if self.busy == 'No':

            self.sales = SalesManager()

            time.sleep(0.1)

            self.sales.talk()

        else:

            time.sleep(0.1)

            print("销售经理正忙")

class NoTalkProxy(Proxy):

    def talk(self):

        print("代理检查销售经理的可访问性")

        time.sleep(0.1)

        print("该销售经理也不会跟你说话不论他/她是否正忙")

if __name__ == '__main__':

    p = Proxy()

    p.talk()

    p.busy = 'Yes'

    p.talk()

    p = NoTalkProxy()

    p.talk()

    p.busy = 'Yes'

    p.talk()

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




以上是关于Python设计模式 - 代理模式的主要内容,如果未能解决你的问题,请参考以下文章

Python设计模式-代理模式

Python设计模式 - 代理模式

python-代理模式

Python 设计模式 — 结构型模式 — 代理模式

Python 设计模式 — 结构型模式 — 代理模式

python设计模式之代理模