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 相关文章推荐
实践Vim配置python开发环境
Jul 02 Python
python使用scrapy发送post请求的坑
Sep 04 Python
python取余运算符知识点详解
Jun 27 Python
python中对数据进行各种排序的方法
Jul 02 Python
Python使用pyserial进行串口通信的实例
Jul 02 Python
如何安装2019Pycharm最新版本(详细教程)
Sep 26 Python
代码总结Python2 和 Python3 字符串的区别
Jan 28 Python
python通用读取vcf文件的类(复制粘贴即可用)
Feb 29 Python
python zip,lambda,map函数代码实例
Apr 04 Python
django 连接数据库出现1045错误的解决方式
May 14 Python
Python在字符串中处理html和xml的方法
Jul 31 Python
Python爬取豆瓣数据实现过程解析
Oct 27 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通过Chianz.com获取IP地址与地区的方法
2015/01/14 PHP
php中文繁体和简体相互转换的方法
2015/03/21 PHP
PHP如何实现Unicode和Utf-8编码相互转换
2015/07/29 PHP
postfixadmin忘记密码后的修改密码方法详解
2016/07/20 PHP
基于thinkPHP类的插入数据库操作功能示例
2017/01/06 PHP
php中file_get_contents()函数用法实例
2019/02/21 PHP
验证控件与Button的OnClientClick事件详细解析
2013/12/04 Javascript
Get中文乱码IE浏览器Get中文乱码解决方案
2013/12/26 Javascript
jquery datepicker参数介绍和示例
2014/04/15 Javascript
Javascript实现图片轮播效果(二)图片序列节点的控制实现
2016/02/17 Javascript
JavaScript的函数式编程基础指南
2016/03/19 Javascript
实例详解ECMAScript5中新增的Array方法
2016/04/05 Javascript
jquery checkbox的相关操作总结
2016/10/17 Javascript
vue增删改查的简单操作
2017/07/15 Javascript
利用babel将es6语法转es5的简单示例
2017/12/01 Javascript
Node.js中,在cmd界面,进入退出Node.js运行环境的方法
2018/05/12 Javascript
Element Table的row-class-name无效与动态高亮显示选中行背景色
2018/11/30 Javascript
node爬取新型冠状病毒的疫情实时动态
2020/02/06 Javascript
python操作mongodb根据_id查询数据的实现方法
2015/05/20 Python
Python 中的 else详解
2016/04/23 Python
使用python3+xlrd解析Excel的实例
2018/05/04 Python
详解利用django中间件django.middleware.csrf.CsrfViewMiddleware防止csrf攻击
2018/10/09 Python
用Python编写一个高效的端口扫描器的方法
2018/12/20 Python
Pycharm使用之设置代码字体大小和颜色主题的教程
2019/07/12 Python
解析python实现Lasso回归
2019/09/11 Python
python 通过视频url获取视频的宽高方式
2019/12/10 Python
python轮询机制控制led实例
2020/05/03 Python
ZINVO手表官网:男士和女士手表
2019/03/10 全球购物
工厂厂长的职责
2013/12/12 职场文书
工厂保安员岗位职责
2014/01/31 职场文书
党的群众路线对照检查材料(个人)
2014/09/24 职场文书
2014年打非治违工作总结
2014/11/13 职场文书
2015年防汛工作总结
2015/05/15 职场文书
六年级语文教学反思
2016/03/03 职场文书
MySQL中的布尔值,怎么存储false或true
2021/06/04 MySQL
【海涛DOTA】D-cup邀请赛NV.cn vs DT.Love
2022/04/01 DOTA