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 相关文章推荐
详解Python3中的迭代器和生成器及其区别
Oct 09 Python
python中for循环输出列表索引与对应的值方法
Nov 07 Python
python文字转语音的实例代码分析
Nov 12 Python
opencv3/C++ 平面对象识别&透视变换方式
Dec 11 Python
Python基于read(size)方法读取超大文件
Mar 12 Python
python构造IP报文实例
May 05 Python
Python实现Keras搭建神经网络训练分类模型教程
Jun 12 Python
解决Keras中Embedding层masking与Concatenate层不可调和的问题
Jun 18 Python
Python工程师必考的6个经典面试题
Jun 28 Python
pandas.DataFrame.drop_duplicates 用法介绍
Jul 06 Python
python3 re返回形式总结
Nov 20 Python
聊聊基于pytorch实现Resnet对本地数据集的训练问题
Mar 25 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
vBulletin Forum 2.3.xx SQL Injection
2006/10/09 PHP
php中使用Curl、socket、file_get_contents三种方法POST提交数据
2011/08/12 PHP
有道搜索和IP138的IP的API接口(PHP应用)
2012/11/29 PHP
国外的为初学者写的JavaScript教程
2008/06/09 Javascript
JavaScript 封装Ajax传递的数据代码
2009/06/05 Javascript
javascript 短路法代码精简
2009/08/20 Javascript
js中一个函数获取另一个函数返回值问题探讨
2013/11/21 Javascript
JavaScript中数据结构与算法(二):队列
2015/06/19 Javascript
js实现随屏幕滚动的带缓冲效果的右下角广告代码
2015/09/04 Javascript
Atitit.js的键盘按键事件捆绑and事件调度
2016/04/01 Javascript
基于javascript编写简单日历
2016/05/02 Javascript
AngularJS实现图片上传和预览功能的方法分析
2017/11/08 Javascript
vue的全局提示框组件实例代码
2018/02/26 Javascript
layui 监听表格复选框选中值的方法
2018/08/15 Javascript
Vue 自定义指令功能完整实例
2019/09/17 Javascript
[02:32]DOTA2英雄基础教程 美杜莎
2014/01/07 DOTA
[07:52]2014DOTA2 TI逗比武士游V社解说背后的故事
2014/07/10 DOTA
Python获取系统所有进程PID及进程名称的方法示例
2018/05/24 Python
Python中的heapq模块源码详析
2019/01/08 Python
Python基于scipy实现信号滤波功能
2019/05/08 Python
python批量修改ssh密码的实现
2019/08/08 Python
python opencv 图像边框(填充)添加及图像混合的实现方法(末尾实现类似幻灯片渐变的效果)
2020/03/09 Python
Python描述数据结构学习之哈夫曼树篇
2020/09/07 Python
python两种获取剪贴板内容的方法
2020/11/06 Python
如何使用Python进行PDF图片识别OCR
2021/01/22 Python
Python解析m3u8拼接下载mp4视频文件的示例代码
2021/03/03 Python
html5 标签
2009/07/16 HTML / CSS
Maje德国官网:法国女性成衣品牌
2017/02/10 全球购物
世界上最具创新性的增强型知名运动品牌:Proviz
2018/04/03 全球购物
父亲八十大寿答谢词
2014/01/23 职场文书
三年级语文教学反思
2014/02/01 职场文书
产品销售计划书
2014/05/04 职场文书
关于教师节的演讲稿
2014/09/04 职场文书
结婚通知短信大全
2015/04/17 职场文书
2019预备党员转正申请书模板2篇!
2019/08/07 职场文书
Windows Server 2016服务器用户管理及远程授权图文教程
2022/08/14 Servers