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网络编程学习笔记(八):XML生成与解析(DOM、ElementTree)
Jun 09 Python
python抓取最新博客内容并生成Rss
May 17 Python
浅谈python可视化包Bokeh
Feb 07 Python
Python实现对字典分别按键(key)和值(value)进行排序的方法分析
Dec 19 Python
python http基本验证方法
Dec 26 Python
Python Django 页面上展示固定的页码数实现代码
Aug 21 Python
Django+uni-app实现数据通信中的请求跨域的示例代码
Oct 12 Python
Python telnet登陆功能实现代码
Apr 16 Python
python适合做数据挖掘吗
Jun 16 Python
python实现批处理文件
Jul 28 Python
Python如何使用logging为Flask增加logid
Mar 30 Python
详解Python常用的魔法方法
Jun 03 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
人尽可用的Windows技巧小贴士之下篇
2007/03/22 PHP
PHP随机字符串生成代码(包括大小写字母)
2013/06/24 PHP
PHP基于socket实现客户端和服务端通讯功能
2017/07/13 PHP
PHP实现websocket通信的方法示例
2018/08/28 PHP
PHP日志LOG类定义与用法示例
2018/09/06 PHP
PHP程序员简单的开展服务治理架构操作详解(三)
2020/05/14 PHP
js活用事件触发对象动作
2008/08/10 Javascript
js实现鼠标拖动图片并兼容IE/FF火狐/谷歌等主流浏览器
2013/06/06 Javascript
Js判断CSS文件加载完毕的具体实现
2014/01/17 Javascript
jquery 插件实现瀑布流图片展示实例
2015/04/03 Javascript
jQuery.prop() 使用详解
2015/07/19 Javascript
Bootstrap每天必学之警告框插件
2016/04/26 Javascript
jquery判断input值不为空的方法
2016/06/05 Javascript
JS实现漂亮的时间选择框效果
2016/08/20 Javascript
PHP抓取HTTPS内容和错误处理的方法
2016/09/30 Javascript
jquery.masonry瀑布流效果
2017/05/25 jQuery
bootstrap日期插件daterangepicker使用详解
2017/10/19 Javascript
TypeScript基础入门教程之三重斜线指令详解
2018/10/22 Javascript
Node.js从字符串生成文件流的实现方法
2019/08/18 Javascript
javascript中layim之查找好友查找群组
2021/02/06 Javascript
python网络编程学习笔记(三):socket网络服务器
2014/06/09 Python
Python实现二叉搜索树
2016/02/03 Python
python 连接sqlite及简单操作
2017/06/30 Python
Python 编码规范(Google Python Style Guide)
2018/05/05 Python
python3.6.8 + pycharm + PyQt5 环境搭建的图文教程
2020/06/11 Python
Python Pivot table透视表使用方法解析
2020/09/11 Python
如何让PyQt5中QWebEngineView与JavaScript交互
2020/10/21 Python
80年代复古T恤:TruffleShuffle
2018/07/02 全球购物
美国名表在线商城:Ashford(支持中文)
2019/09/24 全球购物
万里长城导游词
2015/01/30 职场文书
导游词之南迦巴瓦峰
2019/11/19 职场文书
Python基础知识学习之类的继承
2021/05/31 Python
python内置进制转换函数的操作
2021/06/02 Python
MySQL 中如何归档数据的实现方法
2022/03/16 SQL Server
Win10/Win11 任务栏替换成经典样式
2022/04/19 数码科技
Mysql数据库group by原理详解
2022/07/07 MySQL