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的web.py框架并从hello world开始编程
Apr 25 Python
教你用Type Hint提高Python程序开发效率
Aug 08 Python
Tensorflow 自带可视化Tensorboard使用方法(附项目代码)
Feb 10 Python
python matplotlib画图库学习绘制常用的图
Mar 19 Python
Python分支语句与循环语句应用实例分析
May 07 Python
Python之NumPy(axis=0 与axis=1)区分详解
May 27 Python
Pyqt清空某一个QTreeewidgetItem下的所有分支方法
Jun 17 Python
python读写csv文件并增加行列的实例代码
Aug 01 Python
python将print输出的信息保留到日志文件中
Sep 27 Python
Python银行系统实战源码
Oct 25 Python
音频处理 windows10下python三方库librosa安装教程
Jun 20 Python
Python爬虫scrapy框架Cookie池(微博Cookie池)的使用
Jan 13 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
全国FM电台频率大全 - 27 陕西省
2020/03/11 无线电
十大使用PHP框架的理由
2015/09/26 PHP
PHP unlink与rmdir删除目录及目录下所有文件实例代码
2018/02/07 PHP
JavaScript在IE中“意外地调用了方法或属性访问”
2008/11/19 Javascript
jquery一般方法介绍 入门参考
2011/06/21 Javascript
鼠标移动到图片名上,显示图片的简单实例
2013/07/14 Javascript
JS中字符串trim()使用示例
2015/05/26 Javascript
禁止按回车键提交表单的方法
2015/06/11 Javascript
轻松掌握JavaScript单例模式
2016/08/25 Javascript
JS中微信小程序自定义底部弹出框
2016/12/22 Javascript
Bootstrap导航中表单简单实现代码
2017/03/06 Javascript
Node.js和Express简单入门介绍
2017/03/24 Javascript
angular.js4使用 RxJS 处理多个 Http 请求
2017/09/23 Javascript
angular2中使用第三方js库的实例
2018/02/26 Javascript
vue开发环境配置跨域的方法步骤
2019/01/16 Javascript
vue实现随机验证码功能的实例代码
2019/04/30 Javascript
少女风vue组件库的制作全过程
2019/05/15 Javascript
javascript canvas检测小球碰撞
2020/04/17 Javascript
[03:49]DOTA2 2015国际邀请赛中国区预选赛第二日现场百态
2015/05/27 DOTA
Python实现类似jQuery使用中的链式调用的示例
2016/06/16 Python
分析python动态规划的递归、非递归实现
2018/03/04 Python
使用Python设计一个代码统计工具
2018/04/04 Python
对python中xlsx,csv以及json文件的相互转化方法详解
2018/12/25 Python
用python生成与调用cntk模型代码演示方法
2019/08/26 Python
python系统指定文件的查找只输出目录下所有文件及文件夹
2020/01/19 Python
解决Pycharm的项目目录突然消失的问题
2020/01/20 Python
python删除指定列或多列单个或多个内容实例
2020/06/28 Python
CSS3哪些新特性值得称赞
2016/03/02 HTML / CSS
韩国休闲女装品牌网站:ANAIS
2016/08/24 全球购物
萨克斯第五大道精品百货店: Saks Fifth Avenue
2017/04/28 全球购物
Booking.com德国:预订最好的酒店和住宿
2020/02/16 全球购物
高中生学习总结的自我评价范文
2013/10/13 职场文书
2015年元旦主持词开场白
2014/12/14 职场文书
2015年师德师风承诺书
2015/01/22 职场文书
《风不能把阳光打败》读后感3篇
2020/01/06 职场文书
《遗弃》开发商删推文要跑路?官方回应:还在开发
2022/04/03 其他游戏