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日期的加减等操作的示例
Aug 15 Python
python的构建工具setup.py的方法使用示例
Oct 23 Python
Python数据分析之双色球基于线性回归算法预测下期中奖结果示例
Feb 08 Python
Python multiprocessing多进程原理与应用示例
Feb 28 Python
Python OpenCV利用笔记本摄像头实现人脸检测
Aug 20 Python
Django利用cookie保存用户登录信息的简单实现方法
May 27 Python
python增加图像对比度的方法
Jul 12 Python
解决Django加载静态资源失败的问题
Jul 28 Python
Python GUI编程学习笔记之tkinter控件的介绍及基本使用方法详解
Mar 30 Python
基于Python下载网络图片方法汇总代码实例
Jun 24 Python
idea2020手动安装python插件的实现方法
Jul 17 Python
python如何写个俄罗斯方块
Nov 06 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图片验证码实例
2014/03/21 PHP
浅析php创建者模式
2014/11/25 PHP
PHP统计数值数组中出现频率最多的10个数字的方法
2015/04/20 PHP
PHP对XML内容进行修改和删除实例代码
2016/10/26 PHP
CI框架常用函数封装实例
2016/11/21 PHP
php使用curl伪造来源ip和refer的方法示例
2018/05/08 PHP
一些易混淆且不常用的属性,希望有用
2007/01/29 Javascript
通过jQuery打造支持汉字,拼音,英文快速定位查询的超级select插件
2010/06/18 Javascript
JavaScrip单线程引擎工作原理分析
2010/09/04 Javascript
IE6下focus与blur错乱的解决方案
2011/07/31 Javascript
Javascript表格翻页效果的具体实现
2013/10/05 Javascript
js入门之Function函数的使用方法【新手必看】
2016/11/22 Javascript
node.js中路由,中间件,ge请求和post请求的参数详解
2017/12/26 Javascript
webstorm+vue初始化项目的方法
2018/10/18 Javascript
基于vue2的canvas时钟倒计时组件步骤解析
2018/11/05 Javascript
vue-cli安装使用流程步骤详解
2018/11/08 Javascript
详解vue-element Tree树形控件填坑路
2019/03/26 Javascript
node.js中npm包管理工具用法分析
2020/02/14 Javascript
[06:45]2018DOTA2亚洲邀请赛 4.5 SOLO赛 Sccc vs Maybe
2018/04/06 DOTA
Python程序语言快速上手教程
2012/07/18 Python
详解Python中expandtabs()方法的使用
2015/05/18 Python
从CentOS安装完成到生成词云python的实例
2017/12/01 Python
Pycharm+Scrapy安装并且初始化项目的方法
2019/01/15 Python
Python深拷贝与浅拷贝用法实例分析
2019/05/05 Python
pytorch使用Variable实现线性回归
2019/05/21 Python
python matplotlib库绘制条形图练习题
2019/08/10 Python
pytorch方法测试详解——归一化(BatchNorm2d)
2020/01/15 Python
HTML5中的nav标签学习笔记
2016/06/24 HTML / CSS
美国在线纱线商店:Darn Good Yarn
2019/03/20 全球购物
意向书范文
2014/03/31 职场文书
《天安门广场》教学反思
2014/04/23 职场文书
普通话演讲稿
2014/09/03 职场文书
2015年农村党员干部主题教育活动总结
2015/03/25 职场文书
Python实现抖音热搜定时爬取功能
2022/03/16 Python
Go语言特点及基本数据类型使用详解
2022/03/21 Golang
Go语言grpc和protobuf
2022/04/13 Golang