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不规范的日期字符串处理类
Jun 10 Python
以Python的Pyspider为例剖析搜索引擎的网络爬虫实现方法
Mar 30 Python
Hadoop中的Python框架的使用指南
Apr 22 Python
python集合用法实例分析
May 30 Python
Python实现身份证号码解析
Sep 01 Python
python 获取url中的参数列表实例
Dec 18 Python
Pyqt5实现英文学习词典
Jun 24 Python
Python实现某论坛自动签到功能
Aug 20 Python
python生成器推导式用法简单示例
Oct 08 Python
jenkins配置python脚本定时任务过程图解
Oct 29 Python
Python内置加密模块用法解析
Nov 25 Python
Python作用域与名字空间原理详解
Mar 21 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递归返回值时出现的问题解决办法
2013/02/19 PHP
PHP children()函数讲解
2019/02/03 PHP
php5.6.x到php7.0.x特性小结
2019/08/17 PHP
jQuery 版本的文本输入框检查器Input Check
2009/07/09 Javascript
基于jquery的仿百度搜索框效果代码
2011/04/11 Javascript
文本框输入时 实现自动提示(像百度、google一样)
2012/04/05 Javascript
javascript/jquery获取地址栏url参数的方法
2014/03/05 Javascript
jQuery实现点击查看大图并以弹框的形式居中
2016/08/08 Javascript
详细谈谈AngularJS的子级作用域问题
2016/09/05 Javascript
javascript 动态样式添加的简单实现
2016/10/11 Javascript
简单实现js浮动框
2016/12/13 Javascript
几种tab切换详解
2017/02/03 Javascript
手淘flexible.js框架使用和源代码讲解小结
2018/10/15 Javascript
vue2.0+vue-router构建一个简单的列表页的示例代码
2019/02/13 Javascript
[02:07]DOTA2超级联赛专访BBC:难忘网吧超神经历
2013/06/09 DOTA
[00:43]FTP典藏礼包 DOTA2三大英雄霸气新套装
2014/03/21 DOTA
Python生成pdf文件的方法
2014/08/04 Python
python使用线程封装的一个简单定时器类实例
2015/05/16 Python
Python实现正弦信号的时域波形和频谱图示例【基于matplotlib】
2018/05/04 Python
python实现对求解最长回文子串的动态规划算法
2018/06/02 Python
解决python ogr shp字段写入中文乱码的问题
2018/12/31 Python
python3转换code128条形码的方法
2019/04/17 Python
OpenCV图像颜色反转算法详解
2019/05/13 Python
pycharm编写spark程序,导入pyspark包的3中实现方法
2019/08/02 Python
python 批量修改 labelImg 生成的xml文件的方法
2019/09/09 Python
matplotlib 多个图像共用一个colorbar的实现示例
2020/09/10 Python
Mio Skincare中文官网:肌肤和身体护理
2016/10/26 全球购物
单位工程竣工验收方案
2014/03/16 职场文书
2014年园林绿化工作总结
2014/12/11 职场文书
超市工作总结范文2014
2014/12/19 职场文书
2015年化工厂工作总结
2015/05/04 职场文书
求职信:求职应该注意的问题
2019/04/24 职场文书
MySQL入门命令之函数-单行函数-流程控制函数
2021/04/05 MySQL
如何判断pytorch是否支持GPU加速
2021/06/01 Python
Python socket如何解析HTTP请求内容
2022/02/12 Python
Mysql数据库表中为什么有索引却没有提高查询速度
2022/02/24 MySQL