代理模式(python) 区别于 策略模式(strategy )

代理模式 (Proxy):为某个对象提供一种代理以控制对这个对象的访问。
注意 :代理模式和策略模式的类图很相近,实现方法也是一样的,但是应用场景很不一样,体现了不同的思想。
    策略模式中 同一外部对象 访问 上下文对象 的操作一样,但是 里面的策略对象不同
    代理模式中 不同的外部对象 访问 代理对象 的操作一样,但是 里面的真实对象是一样的
    
代理模式在访问对象时引入一定程度的间接性,因为这种间接性,可以附加多种用途
应用场景
1、远程代理。为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实。
2、虚拟代理。当要创建耗时很长的对象时,可以使用虚拟代理。虚拟代理完成的工作为新建真实对象,并在新建的过程中给出提示。比如在网页加载图片的过程中,虚拟代理可以用一个图片框暂时替代真实的图片。
3、安全代理。用于控制真实对象访问是的权限。

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

[html]  view plain copy
  1. #encoding=utf-8  
  2. #  
  3. #by panda  
  4. #代理模式  
  5.   
  6. def printInfo(info):  
  7.     print unicode(info, 'utf-8').encode('gbk')  
  8.   
  9. class SchoolGirl():  
  10.     Name = ''  
  11.     def __init__(self, name):  
  12.         self.Name = name  
  13.       
  14. class GiveGift():  
  15.     """接口类:定义通用操作"""  
  16.     def GiveDolls(self):  
  17.         return  
  18.       
  19.     def GiveFlowers(self):  
  20.         return  
  21.       
  22.     def GiveChocolate(self):  
  23.         return  
  24.       
  25. class Pursuit(GiveGift):  
  26.     mm = None  
  27.     def __init__(self, mm):  
  28.         self.mm = mm;  
  29.         return;  
  30.       
  31.     def GiveDolls(self):    
  32.         printInfo("代理模式:")  
  33.         printInfo("送 %s 洋娃娃" % self.mm.Name)        
  34.         return  
  35.       
  36.     def GiveFlowers(self):  
  37.         printInfo("代理模式:")  
  38.         printInfo("送 %s 鲜花" % self.mm.Name)        
  39.         return  
  40.       
  41.     def GiveChocolate(self):  
  42.         printInfo("代理模式:")  
  43.         printInfo("送 %s 巧克力" % self.mm.Name)          
  44.         return  
  45.       
  46.   
  47. class Proxy(GiveGift):  
  48.     gg = None  
  49.     def __init__(self, mm):  
  50.         self.gg = Pursuit(mm);  
  51.         return;  
  52.       
  53.     def GiveDolls(self):    
  54.         self.gg.GiveDolls()  
  55.         return  
  56.       
  57.     def GiveFlowers(self):  
  58.         self.gg.GiveFlowers()  
  59.         return  
  60.       
  61.     def GiveChocolate(self):  
  62.         self.gg.GiveChocolate()  
  63.         return  
  64.       
  65.       
  66.   
  67.   
  68. def clientUI():  
  69.     mm = SchoolGirl(r"韩梅梅")  
  70.     proxy = Proxy(mm)  
  71.     proxy.GiveDolls()  
  72.     proxy.GiveFlowers()  
  73.     proxy.GiveChocolate()  
  74.     return  
  75.   
  76. if __name__ == '__main__':  
  77.     clientUI();  


类图



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值