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设计模式 - 代理模式的主要内容,如果未能解决你的问题,请参考以下文章