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之Python文档
Oct 10 Python
Python的Flask框架中使用Flask-SQLAlchemy管理数据库的教程
Jun 14 Python
centos6.4下python3.6.1安装教程
Jul 21 Python
Python实现按学生年龄排序的实际问题详解
Aug 29 Python
python 定义n个变量方法 (变量声明自动化)
Nov 10 Python
Python人脸识别第三方库face_recognition接口说明文档
May 03 Python
Python定义函数时参数有默认值问题解决
Dec 19 Python
windows上彻底删除jupyter notebook的实现
Apr 13 Python
基于python计算并显示日间、星期客流高峰
May 07 Python
python的pip有什么用
Jun 17 Python
解决阿里云邮件发送不能使用25端口问题
Aug 07 Python
判断Python中的Nonetype类型
May 25 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
使用sockets:从新闻组中获取文章(二)
2006/10/09 PHP
PHP开发需要注意的安全问题
2010/09/01 PHP
使用PHP similar text计算两个字符串相似度
2015/11/06 PHP
ExtJS 2.0实用简明教程 之Ext类库简介
2009/04/29 Javascript
JavaScript 类似flash效果的立体图片浏览器
2010/02/08 Javascript
JQuery优缺点分析说明
2011/04/10 Javascript
Javascript类定义语法,私有成员、受保护成员、静态成员等介绍
2011/12/08 Javascript
使用DNode实现php和nodejs之间通信的简单实例
2015/07/06 NodeJs
JavaScript程序设计之JS调试
2015/12/09 Javascript
Bootstarp风格的toggle效果分享
2016/02/23 Javascript
JavaScript优化以及前段开发小技巧
2017/02/02 Javascript
2种简单的js倒计时方式
2017/10/20 Javascript
Vue DevTools调试工具的使用
2017/12/05 Javascript
Angular实现模版驱动表单的自定义校验功能(密码确认为例)
2018/05/17 Javascript
JS函数动态传递参数的方法分析【基于arguments对象】
2019/06/05 Javascript
微信小程序组件传值图示过程详解
2019/07/31 Javascript
js 闭包深入理解与实例分析
2020/03/19 Javascript
Vue生命周期activated之返回上一页不重新请求数据操作
2020/07/26 Javascript
[02:22]完美世界DOTA2联赛PWL S3 集锦第一期
2020/12/15 DOTA
深入学习Python中的装饰器使用
2016/06/20 Python
Python操作RabbitMQ服务器实现消息队列的路由功能
2016/06/29 Python
对Python 语音识别框架详解
2018/12/24 Python
python处理DICOM并计算三维模型体积
2019/02/26 Python
python flask 如何修改默认端口号的方法步骤
2019/07/12 Python
Python操作SQLite数据库过程解析
2019/09/02 Python
Django 解决阿里云部署同步数据库报错的问题
2020/05/14 Python
如何在 Matplotlib 中更改绘图背景的实现
2020/11/26 Python
python 使用xlsxwriter循环向excel中插入数据和图片的操作
2021/01/01 Python
Madewell澳大利亚官方网站:美国休闲服饰品牌
2019/07/18 全球购物
房产委托公证书样本
2014/04/04 职场文书
2014年领导班子专项整治整改方案
2014/09/28 职场文书
中学生社会实践教育活动总结
2015/05/06 职场文书
小学英语课教学反思
2016/02/15 职场文书
详解vue身份认证管理和租户管理
2021/05/25 Vue.js
MySQL空间数据存储及函数
2021/09/25 MySQL
【海涛dota解说】海涛小满开黑4v5被破两路翻盘潮汐第一视角解说
2022/04/01 DOTA