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使用xauth方式登录饭否网然后发消息
Apr 11 Python
安装dbus-python的简要教程
May 05 Python
听歌识曲--用python实现一个音乐检索器的功能
Nov 15 Python
Python tornado队列示例-一个并发web爬虫代码分享
Jan 09 Python
使用python的pandas库读取csv文件保存至mysql数据库
Aug 20 Python
pip安装python库的方法总结
Aug 02 Python
Django发送邮件和itsdangerous模块的配合使用解析
Aug 10 Python
Python字符串、列表、元组、字典、集合的补充实例详解
Dec 20 Python
pytorch进行上采样的种类实例
Feb 18 Python
Python基于Hypothesis测试库生成测试数据
Apr 29 Python
Pytorch学习之torch用法----比较操作(Comparison Ops)
Jun 28 Python
python怎么对数字进行过滤
Jul 05 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
laravel自定义分页效果
2017/07/23 PHP
php-fpm中max_children的配置
2019/03/15 PHP
JS+CSS设置img在DIV中只显示Img垂直居中的部分
2013/10/24 Javascript
JavaScript获取当前页面上的指定对象示例代码
2014/02/28 Javascript
PHP中使用微秒计算脚本执行时间例子
2014/11/19 Javascript
生成二维码方法汇总
2014/12/26 Javascript
14个有用的Jquery技巧分享
2015/01/08 Javascript
基于javascript实现动态显示当前系统时间
2016/01/28 Javascript
jQuery树形控件zTree使用小结
2016/08/02 Javascript
jq实现左滑显示删除按钮,点击删除实现删除数据功能(推荐)
2016/08/23 Javascript
Jquery AJAX POST与GET之间的区别详细介绍
2016/10/17 Javascript
JavaScript高仿支付宝倒计时页面及代码实现
2016/10/21 Javascript
微信小程序开发之视频播放器 Video 弹幕 弹幕颜色自定义实例
2016/12/08 Javascript
jQuery中页面返回顶部的方法总结
2016/12/30 Javascript
jQuery通过改变input的type属性实现密码显示隐藏切换功能
2017/02/08 Javascript
深入理解Angular.JS中的Scope继承
2017/06/04 Javascript
Ajax高级笔记 JavaScript高级程序设计笔记
2017/06/22 Javascript
深入理解vue $refs的基本用法
2017/07/13 Javascript
angular4 JavaScript内存溢出问题
2018/03/06 Javascript
vue移动端下拉刷新和上拉加载的实现代码
2018/09/08 Javascript
10行代码实现微信小程序滑动tab切换
2018/12/28 Javascript
js的对象与函数详解
2019/01/21 Javascript
微信小程序实现文件、图片上传功能
2020/08/18 Javascript
layui的表单验证支持ajax判断用户名是否重复的实例
2019/09/06 Javascript
python使用点操作符访问字典(dict)数据的方法
2015/03/16 Python
Python通过TensorFlow卷积神经网络实现猫狗识别
2019/03/14 Python
Python一行代码实现快速排序的方法
2019/04/30 Python
python字符串的拼接方法总结
2019/11/18 Python
6行Python代码实现进度条效果(Progress、tqdm、alive-progress​​​​​​​和PySimpleGUI库)
2020/01/06 Python
amazeui树节点自动展开折叠面板并选中第一个树节点的实现
2020/08/24 HTML / CSS
非洲NO.1网上商店:Jumia肯尼亚
2016/08/18 全球购物
CAT鞋英国官网:坚固耐用的靴子和鞋
2016/10/21 全球购物
英国儿童图书网站:Scholastic
2017/03/26 全球购物
个人自我鉴定
2013/11/07 职场文书
酒店执行总经理岗位职责
2013/12/15 职场文书
校园环保广播稿(3篇)
2014/09/15 职场文书