gpt4 book ai didi

Python设计模式之代理模式简单示例

转载 作者:qq735679552 更新时间:2022-09-28 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章Python设计模式之代理模式简单示例由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

本文实例讲述了Python设计模式之代理模式。分享给大家供大家参考,具体如下:

代理模式在一般形式上是一个类函数接口。代理可以是这些事物的接口:网络连接,存储的对象,文件,或者其他资源(昂贵的或者不容易复制的).

一个众所周知的代理模式的例子就是引用计数的指针对象.

代理模式是结构设计模式的例子。这个模式的目的是要创建一个真实对象或类的代理.

代理模式有3个必要的元素:

1. 真实的对象(执行业务逻辑,被代理的对象) 2. 代理类(用户请求的一个接口,对真实目标的保护) 3. 用户(获取任务的用户请求) 。

代理模式存在在以下的情形中:

① 为真实目标类创建一个对象的代价是昂贵的,一个简单对象被代理类创建是便宜的方法。 ② 对象必须防止被用户直接使用。 ③ 当实际请求的时候,为真实目标类创建一个对象会有延迟.

用一些真实世界的代理模式例子,allapplabs 和 userpages 来描述:

使用缓存代理能够马上缓存用户请求的web页面。这个方法能够避免更多重复的请求,改善性能.

消息box用进度条的方式传递程序执行状态 。

用文字处理程序打开一个文件,导入一个消息说,“please wait while the software opens the document” 。

一个简单的python实现; 。

让我们想想一个正规办公的场景,为了向一个公司的销售主管谈话,用户首先会向销售主管办公室的接待员打个电话,随后接待员转接电话。在这个例子中,销售主管会是用户希望交谈的目标,接待员就是一个代理,保护主体不受用户直接要求谈话中苦恼.

扩展这个例子,我门可以认为'销售主管'是一个真正的目标,创建一个常用的目标类作为管理者,接待员可以继承.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#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程序设计有所帮助.

原文链接:http://www.cnblogs.com/lizhitai/p/4476091.html 。

最后此篇关于Python设计模式之代理模式简单示例的文章就讲到这里了,如果你想了解更多关于Python设计模式之代理模式简单示例的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com