Python设计模式之代理模式简单示例


Posted in Python onJanuary 09, 2018

本文实例讲述了Python设计模式之代理模式。分享给大家供大家参考,具体如下:

代理模式在一般形式上是一个类函数接口。代理可以是这些事物的接口:网络连接,存储的对象,文件,或者其他资源(昂贵的或者不容易复制的)。

一个众所周知的代理模式的例子就是引用计数的指针对象。

代理模式是结构设计模式的例子。这个模式的目的是要创建一个真实对象或类的代理。

代理模式有3个必要的元素:

1. 真实的对象(执行业务逻辑,被代理的对象)
2. 代理类(用户请求的一个接口,对真实目标的保护)
3. 用户(获取任务的用户请求)

代理模式存在在以下的情形中:

① 为真实目标类创建一个对象的代价是昂贵的,一个简单对象被代理类创建是便宜的方法。
② 对象必须防止被用户直接使用。
③ 当实际请求的时候,为真实目标类创建一个对象会有延迟。

用一些真实世界的代理模式例子,allapplabs 和 userpages 来描述:

使用缓存代理能够马上缓存用户请求的web页面。这个方法能够避免更多重复的请求,改善性能。

消息box用进度条的方式传递程序执行状态

用文字处理程序打开一个文件,导入一个消息说,“please wait while the software opens the document”

一个简单的python实现;

让我们想想一个正规办公的场景,为了向一个公司的销售主管谈话,用户首先会向销售主管办公室的接待员打个电话,随后接待员转接电话。在这个例子中,销售主管会是用户希望交谈的目标,接待员就是一个代理,保护主体不受用户直接要求谈话中苦恼。

扩展这个例子,我门可以认为'销售主管'是一个真正的目标,创建一个常用的目标类作为管理者,接待员可以继承。

#coding=utf8
import time
class Manager(object):
  def work(self):
    pass
  def talk(self):
    pass
class SalesManager(Manager):
  def work(self):
    print "Sales Manager working..."
  def talk(self):
    print "Sales Manager ready to talk"
class Proxy(Manager):
  def __init__(self):
    self.busy = 'No'
    self.sales = None
  def work(self):
    print "Proxy checking for Sales Manager availability"
    if self.busy == 'Yes':
      self.sales = SalesManager()
      time.sleep(2)
      self.sales.talk()
    else:
      time.sleep(2)
      print "Sales Manager is busy"
if __name__ == '__main__':
  p = Proxy()
  p.busy = 'Yes'
  p.work()

运行结果:

Python设计模式之代理模式简单示例

更多关于Python相关内容可查看本站专题:《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python实现建立SSH连接的方法
Jun 03 Python
Python找出list中最常出现元素的方法
Jun 14 Python
django允许外部访问的实例讲解
May 14 Python
python在html中插入简单的代码并加上时间戳的方法
Oct 16 Python
对Python模块导入时全局变量__all__的作用详解
Jan 11 Python
django项目中使用手机号登录的实例代码
Aug 15 Python
Python 生成器,迭代,yield关键字,send()传参给yield语句操作示例
Oct 12 Python
python框架django项目部署相关知识详解
Nov 04 Python
浅析Django中关于session的使用
Dec 30 Python
浅谈Python访问MySQL的正确姿势
Jan 07 Python
python3操作注册表的方法(Url protocol)
Feb 05 Python
python 在右键菜单中加入复制目标文件的有效存放路径(单斜杠或者双反斜杠)
Apr 08 Python
基于python内置函数与匿名函数详解
Jan 09 #Python
Python设计模式之工厂模式简单示例
Jan 09 #Python
浅谈numpy库的常用基本操作方法
Jan 09 #Python
基于Python中单例模式的几种实现方式及优化详解
Jan 09 #Python
浅谈Python2获取中文文件名的编码问题
Jan 09 #Python
在CentOS6上安装Python2.7的解决方法
Jan 09 #Python
浅谈Matplotlib简介和pyplot的简单使用——文本标注和箭头
Jan 09 #Python
You might like
PHP 和 MySQL 开发的 8 个技巧
2006/10/09 PHP
PHP基础之输出缓冲区基本概念、原理分析
2019/06/19 PHP
Windows服务器中PHP如何安装redis扩展
2019/09/27 PHP
prototype 的说明 js类
2006/09/07 Javascript
深入理解JavaScript系列(11) 执行上下文(Execution Contexts)
2012/01/15 Javascript
把jquery 的dialog和ztree结合实现步骤
2013/08/02 Javascript
浅析IE10兼容性问题(frameset的cols属性)
2014/01/03 Javascript
jquery序列化表单去除指定元素示例代码
2014/04/10 Javascript
PHP PDO操作总结
2014/11/17 Javascript
使用Bootstrap框架制作查询页面的界面实例代码
2016/05/27 Javascript
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
2016/12/14 Javascript
原生javascript实现的全屏滚动功能示例
2017/09/19 Javascript
CSS3结合jQuery实现动画效果及回调函数的实例
2017/12/27 jQuery
jQuery实现的图片点击放大缩小功能案例
2020/01/02 jQuery
vue过滤器实现日期格式化的案例分析
2020/07/02 Javascript
JS删除对象中某一属性案例详解
2020/09/08 Javascript
Python实现提取谷歌音乐搜索结果的方法
2015/07/10 Python
浅谈python中的getattr函数 hasattr函数
2016/06/14 Python
django从请求到响应的过程深入讲解
2018/08/01 Python
Numpy 改变数组维度的几种方法小结
2018/08/02 Python
selenium3+python3环境搭建教程图解
2018/12/07 Python
pytz格式化北京时间多出6分钟问题的解决方法
2019/06/21 Python
Python插件机制实现详解
2020/05/04 Python
Python 判断时间是否在时间区间内的实例
2020/05/16 Python
html5 offlline 缓存使用示例
2013/06/24 HTML / CSS
天猫国际进口超市直营:官方直采,一站购齐
2017/12/11 全球购物
澳洲的服装老品牌:SABA
2018/02/06 全球购物
Chemist Warehouse中文网:澳洲连锁大药房
2021/02/05 全球购物
介绍一下linux文件系统分配策略
2013/02/25 面试题
教师师德教育的自我评价
2013/10/31 职场文书
团支书的期末学习总结自我评价
2013/11/01 职场文书
优秀的导游求职信范文
2014/04/06 职场文书
小学模范班主任事迹材料
2014/05/13 职场文书
2015年医药代表工作总结
2015/04/25 职场文书
上班迟到检讨书范文
2015/05/06 职场文书
如何写一份成功的商业计划书
2019/06/25 职场文书