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 相关文章推荐
mac下如何将python2.7改为python3
Jul 13 Python
基于PyQt4和PySide实现输入对话框效果
Feb 27 Python
Python常见数据类型转换操作示例
May 08 Python
如何关掉pycharm中的python console(图解)
Oct 31 Python
python循环嵌套的多种使用方法解析
Nov 29 Python
Python关键字及可变参数*args,**kw原理解析
Apr 04 Python
Python基于当前时间批量创建文件
May 07 Python
ITK 实现多张图像转成单个nii.gz或mha文件案例
Jul 01 Python
如何使用PyCharm引入需要使用的包的方法
Sep 22 Python
python中watchdog文件监控与检测上传功能
Oct 30 Python
一篇文章带你搞定Ubuntu中打开Pycharm总是卡顿崩溃
Nov 02 Python
python编程简单几行代码实现视频转换Gif示例
Oct 05 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
浅析memcache启动以及telnet命令详解
2013/06/28 PHP
深入浅出php socket编程
2015/05/13 PHP
php reset() 函数指针指向数组中的第一个元素并输出实例代码
2016/11/21 PHP
Yii框架实现对数据库的CURD操作示例
2019/09/03 PHP
laravel框架模型和数据库基础操作实例详解
2020/01/25 PHP
JavaScript调用堆栈及setTimeout使用方法深入剖析
2013/02/16 Javascript
js验证模型自我实现的具体方法
2013/06/21 Javascript
js中单引号与双引号冲突问题解决方法
2013/10/04 Javascript
jquery遍历checkbox的注意事项说明
2014/02/21 Javascript
Javascript监视变量变化的方法
2015/06/09 Javascript
js实现数组转换成json
2015/06/26 Javascript
jquery实现超简洁的TAB选项卡效果代码
2015/08/28 Javascript
jQuery插件Flexslider实现图片轮播、图文结合滑动切换效果
2020/04/16 Javascript
seajs模块之间依赖的加载以及模块的执行
2016/10/21 Javascript
jQuery实现select模糊查询(反射机制)
2017/01/14 Javascript
EasyUi 打开对话框后控件赋值及赋值后不显示的问题解决办法
2017/01/19 Javascript
ES6新特性之类(Class)和继承(Extends)相关概念与用法分析
2017/05/24 Javascript
LayerClose弹窗关闭刷新方法
2018/08/17 Javascript
详解vue项目中使用token的身份验证的简单实践
2019/03/08 Javascript
Electron vue的使用教程图文详解
2019/07/05 Javascript
bootstrap table列和表头对不齐的解决方法
2019/07/19 Javascript
详解在vue-cli3.0中自定css、js和图片的打包路径
2019/08/26 Javascript
JS实现随机抽选获奖者
2019/11/07 Javascript
python3.3实现乘法表示例
2014/02/07 Python
基于Python实现用户管理系统
2019/02/26 Python
pyqt5中QThread在使用时出现重复emit的实例
2019/06/21 Python
wxPython实现整点报时
2019/11/18 Python
HTML5 source标签:媒介元素定义媒介资源
2018/01/29 HTML / CSS
Java基础面试题
2012/11/02 面试题
学校献爱心活动总结
2014/07/08 职场文书
学生不参加考试检讨书
2015/02/19 职场文书
2015年世界无车日活动总结
2015/03/23 职场文书
大学生心理健康教育心得体会
2016/01/12 职场文书
微信小程序用户授权最佳实践指南
2021/05/08 Javascript
聊聊配置 Nginx 访问与错误日志的问题
2022/05/25 Servers
Python使用Beautiful Soup(BS4)库解析HTML和XML
2022/06/05 Python