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编程中用close()方法关闭文件的教程
May 24 Python
Python对CSV、Excel、txt、dat文件的处理
Sep 18 Python
对Python3中dict.keys()转换成list类型的方法详解
Feb 03 Python
python 实现绘制整齐的表格
Nov 18 Python
python 微信好友特征数据分析及可视化
Jan 07 Python
Python selenium 自动化脚本打包成一个exe文件(推荐)
Jan 14 Python
django之从html页面表单获取输入的数据实例
Mar 16 Python
TensorFlow tf.nn.conv2d_transpose是怎样实现反卷积的
Apr 20 Python
Keras设置以及获取权重的实现
Jun 19 Python
python中if嵌套命令实例讲解
Feb 25 Python
Python Flask请求扩展与中间件相关知识总结
Jun 11 Python
python绘制云雨图raincloud plot
Aug 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
PHP出错界面
2006/10/09 PHP
PHP对象链式操作实现原理分析
2016/10/09 PHP
PHP Laravel 上传图片、文件等类封装
2017/08/16 PHP
laravel框架中控制器的创建和使用方法分析
2019/11/23 PHP
jQuery.autocomplete 支持中文输入(firefox)修正方法
2011/03/10 Javascript
jquery二级导航内容均分的原理及实现
2013/08/13 Javascript
js创建表单元素并使用submit进行提交
2014/08/14 Javascript
JS模拟键盘打字效果的方法
2015/08/05 Javascript
解析JavaScript面向对象概念中的Object类型与作用域
2016/05/10 Javascript
js中 计算两个日期间的工作日的简单实例
2016/08/08 Javascript
Bootstrap 模态框实例插件案例分析
2016/12/28 Javascript
jQuery实现可编辑表格并生成json结果(实例代码)
2017/07/19 jQuery
浅谈Angular HttpClient简单入门
2018/05/04 Javascript
vue-router的HTML5 History 模式设置
2018/09/08 Javascript
JavaScript函数的4种调用方法实例分析
2019/03/05 Javascript
JS实现百度搜索框关键字推荐
2020/02/17 Javascript
vue 保留两位小数 不能直接用toFixed(2) 的解决
2020/08/07 Javascript
原生js实现拖拽移动与缩放效果
2020/08/24 Javascript
[02:40]DOTA2英雄基础教程 炼金术士
2013/12/23 DOTA
[03:02]2014DOTA2西雅图邀请赛 让队员自己告诉你DK NAVI备战情况
2014/07/08 DOTA
[01:09:23]KG vs TNC 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
[01:54]TI珍贵瞬间系列(三):翻盘
2020/08/28 DOTA
python中迭代器(iterator)用法实例分析
2015/04/29 Python
python检测是文件还是目录的方法
2015/07/03 Python
python先序遍历二叉树问题
2017/11/10 Python
TensorFlow MNIST手写数据集的实现方法
2020/02/05 Python
python中字典增加和删除使用方法
2020/09/30 Python
Python之qq自动发消息的示例代码
2021/02/18 Python
使用css如何制作时间ICON方法实践
2012/11/12 HTML / CSS
银行批评与自我批评
2014/02/10 职场文书
软件项目开发计划书
2014/05/01 职场文书
2014年团工作总结
2014/11/27 职场文书
电气工程师岗位职责
2015/02/12 职场文书
OpenCV-Python模板匹配人眼的实例
2021/06/08 Python
Python字典的基础操作
2021/11/01 Python
Linux中文件的基本属性介绍
2022/06/01 Servers