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中的__getitem__方法与slice对象的切片操作
Jun 27 Python
python利用urllib实现爬取京东网站商品图片的爬虫实例
Aug 24 Python
matplotlib savefig 保存图片大小的实例
May 24 Python
Python lxml解析HTML并用xpath获取元素的方法
Jan 02 Python
python3转换code128条形码的方法
Apr 17 Python
Puppeteer使用示例详解
Jun 20 Python
anaconda如何查看并管理python环境
Jul 05 Python
Python安装selenium包详细过程
Jul 23 Python
python学生信息管理系统实现代码
Dec 17 Python
python 双循环遍历list 变量判断代码
May 04 Python
Python实现列表索引批量删除的5种方法
Nov 16 Python
基于Python和openCV实现图像的全景拼接详细步骤
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
linux iconv方法的使用
2011/10/01 PHP
php中经典方法实现判断多维数组是否为空
2011/10/23 PHP
php中AES加密解密的例子小结
2014/02/18 PHP
PHP JSON出错:Cannot use object of type stdClass as array解决方法
2014/08/16 PHP
ThinkPHP入口文件设置及相关注意事项分析
2014/12/05 PHP
php与python实现的线程池多线程爬虫功能示例
2016/10/12 PHP
JS中彻底删除JSON对象组成的数组中的元素
2020/09/22 PHP
alixixi runcode.asp的代码不错的应用
2007/08/08 Javascript
js中的window.open返回object的错误的解决方法
2009/08/15 Javascript
仿百度的关键词匹配搜索示例
2013/09/25 Javascript
javascript实现随机读取数组的方法
2015/08/03 Javascript
JavaScript字符串删除重复字符的方法
2015/12/25 Javascript
浅析jquery数组删除指定元素的方法:grep()
2016/05/19 Javascript
Ubuntu系统下Angularjs开发环境安装
2016/09/01 Javascript
Vue.directive自定义指令的使用详解
2017/03/10 Javascript
angularJS之$http:与服务器交互示例
2017/03/17 Javascript
JavaScript实现隐藏省略文字效果的方法
2017/04/27 Javascript
基于vue-cli 打包时抽离项目相关配置文件详解
2018/03/07 Javascript
chosen实现省市区三级联动
2018/08/16 Javascript
微信小程序实现文字跑马灯
2020/05/26 Javascript
vue 中使用 watch 出现了如下的报错的原因分析
2019/05/21 Javascript
vue fetch中的.then()的正确使用方法
2020/04/17 Javascript
基于 Vue 的 Electron 项目搭建过程图文详解
2020/07/22 Javascript
[05:49]DOTA2-DPC中国联赛 正赛 Elephant vs LBZS 选手采访
2021/03/11 DOTA
Python urlopen 使用小示例
2008/09/06 Python
django+echart绘制曲线图的方法示例
2018/11/26 Python
Python面向对象程序设计示例小结
2019/01/30 Python
Python 隐藏输入密码时屏幕回显的实例
2019/02/19 Python
Python Dataframe常见索引方式详解
2020/05/27 Python
HTML5实现文件断点续传的方法
2017/01/04 HTML / CSS
美国存储和组织商店:The Container Store
2017/08/16 全球购物
心得体会怎么写
2013/12/30 职场文书
草船借箭教学反思
2014/02/03 职场文书
合理缓解职场压力,让你随时保持最佳状态!
2019/06/21 职场文书
python本地文件服务器实例教程
2021/05/02 Python
CSS文本阴影 text-shadow 悬停效果详解
2022/05/25 HTML / CSS