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中optparse模块使用浅析
Jan 01 Python
Django框架模板介绍
Jan 15 Python
Python3环境安装Scrapy爬虫框架过程及常见错误
Jul 12 Python
seek引发的python文件读写的问题及解决
Jul 26 Python
Django使用unittest模块进行单元测试过程解析
Aug 02 Python
Python爬虫 批量爬取下载抖音视频代码实例
Aug 16 Python
python2和python3实现在图片上加汉字的方法
Aug 22 Python
python实现截取屏幕保存文件,删除N天前截图的例子
Aug 27 Python
Python3列表List入门知识附实例
Feb 09 Python
Django Haystack 全文检索与关键词高亮的实现
Feb 17 Python
python爬虫用scrapy获取影片的实例分析
Nov 23 Python
Python 爬虫批量爬取网页图片保存到本地的实现代码
Dec 24 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中防止伪造跨站请求的小招式
2011/09/02 PHP
如何使用PHP批量去除文件UTF8 BOM信息
2013/08/05 PHP
yii2 resetful 授权验证详解
2017/05/18 PHP
用php实现分页效果的示例代码
2020/12/10 PHP
JavaScript静态的动态
2006/09/18 Javascript
JS 继承实例分析
2008/11/04 Javascript
js获取IP和PcName(IE)在vs中可用
2013/08/02 Javascript
javascript html5轻松实现拖动功能
2017/03/01 Javascript
vue中配置mint-ui报css错误问题的解决方法
2017/10/11 Javascript
微信小程序实现点击按钮修改view标签背景颜色功能示例【附demo源码下载】
2017/12/06 Javascript
Angular4.x通过路由守卫进行路由重定向实现根据条件跳转到相应的页面(推荐)
2018/05/10 Javascript
vue.js仿hover效果的实现方法示例
2019/01/28 Javascript
微信小程序中转义字符的处理方法
2019/03/28 Javascript
Vue中全局变量的定义和使用
2019/06/05 Javascript
Vue事件修饰符native、self示例详解
2019/07/09 Javascript
python模拟事件触发机制详解
2018/01/19 Python
Python pyinotify模块实现对文档的实时监控功能方法
2018/10/13 Python
CentOS 7下安装Python3.6 及遇到的问题小结
2018/11/08 Python
python 读取鼠标点击坐标的实例
2018/12/29 Python
详解django中url路由配置及渲染方式
2019/02/25 Python
python进程池实现的多进程文件夹copy器完整示例
2019/11/27 Python
Python线程threading模块用法详解
2020/02/26 Python
美国浴缸、水槽和水龙头购物网站:Vintage Tub & Bath
2019/11/05 全球购物
设计毕业生简历中的自我评价
2013/10/01 职场文书
工程师岗位职责
2013/11/08 职场文书
《学会待客》教学反思
2014/02/22 职场文书
21岁生日感言
2014/02/27 职场文书
英语专业毕业生求职信
2014/05/24 职场文书
机械设计制造及其自动化专业求职信
2014/06/17 职场文书
庆祝国庆节演讲稿2014
2014/09/19 职场文书
2014年新农村建设工作总结
2014/12/01 职场文书
化妆品促销活动总结
2015/05/07 职场文书
结婚典礼主持词
2015/06/29 职场文书
红领巾广播站广播稿
2015/08/19 职场文书
2016年法制宣传月活动总结
2016/04/01 职场文书
教你怎么用Python实现多路径迷宫
2021/04/29 Python