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实现换行符转换的脚本的教程
Apr 16 Python
Python开发如何在ubuntu 15.10 上配置vim
Jan 25 Python
Django学习笔记之Class-Based-View
Feb 15 Python
Java与Python两大幸存者谁更胜一筹呢
Apr 12 Python
使用python存储网页上的图片实例
May 22 Python
浅谈Python2、Python3相对路径、绝对路径导入方法
Jun 22 Python
python内置数据类型之列表操作
Nov 12 Python
python科学计算之narray对象用法
Nov 25 Python
关于python 的legend图例,参数使用说明
Apr 17 Python
pyspark 随机森林的实现
Apr 24 Python
python rolling regression. 使用 Python 实现滚动回归操作
Jun 08 Python
Python 创建守护进程的示例
Sep 29 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递归列出所有文件和目录的代码
2008/09/10 PHP
PHP将整个网站生成HTML纯静态网页的方法总结
2012/02/05 PHP
深入了解PHP类Class的概念
2012/06/14 PHP
Yii2实现ajax上传图片插件用法
2016/04/28 PHP
PHP批量获取网页中所有固定种子链接的方法
2016/11/18 PHP
PHP 实现页面静态化的几种方法
2017/07/23 PHP
使用js 设置url参数
2013/07/08 Javascript
js 数组操作之pop,push,unshift,splice,shift
2014/01/29 Javascript
网页下载文件期间如何防止用户对网页进行其他操作
2014/06/27 Javascript
JS通过ajax动态读取xml文件内容的方法
2015/03/24 Javascript
JQuery控制radio选中和不选中方法总结
2015/04/15 Javascript
javascript实现可拖动变色并关闭层窗口实例
2015/05/15 Javascript
Jquery ajax基础教程
2015/11/20 Javascript
jQuery AjaxUpload 上传图片代码
2016/02/02 Javascript
分享自己用JS做的扫雷小游戏
2016/02/17 Javascript
pc加载更多功能和移动端下拉刷新加载数据
2016/11/07 Javascript
使用vue的v-for生成table并给table加上序号的实例代码
2017/10/27 Javascript
微信小程序实现图片滚动效果示例
2018/12/05 Javascript
vue使用video.js进行视频播放功能
2019/07/18 Javascript
Vue如何使用混合Mixins和插件开发详解
2020/02/05 Javascript
在Python的Django框架中simple-todo工具的简单使用
2015/05/30 Python
Python标准库inspect的具体使用方法
2017/12/06 Python
Python3利用Dlib19.7实现摄像头人脸识别的方法
2018/05/11 Python
python钉钉机器人运维脚本监控实例
2019/02/20 Python
一个可以套路别人的python小程序实例代码
2019/04/09 Python
Python集合基本概念与相关操作实例分析
2019/10/30 Python
Python制作简易版小工具之计算天数的实现思路
2020/02/13 Python
Windows下PyCharm配置Anaconda环境(超详细教程)
2020/07/31 Python
美国孕妇装品牌:Destination Maternity
2018/02/04 全球购物
俄罗斯天然和有机产品、健康生活网上商店:Fitomarket.ru
2020/10/09 全球购物
学生实习自我鉴定
2013/10/11 职场文书
财务副总经理工作职责
2013/11/25 职场文书
最新大学职业规划书范文
2013/12/30 职场文书
公司年会抽奖活动主持词
2014/03/31 职场文书
政风行风评议整改方案
2014/09/15 职场文书
2015年乡镇工会工作总结
2015/05/19 职场文书