• python 设计模式之代理模式


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

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

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

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

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

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

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

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

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

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

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

    一个简单的python实现;

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

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

    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.budy = '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.work()
  • 相关阅读:
    bzoj2733 永无乡 平衡树按秩合并
    bzoj2752 高速公路 线段树
    bzoj1052 覆盖问题 二分答案 dfs
    bzoj1584 打扫卫生 dp
    bzoj1854 游戏 二分图
    bzoj3316 JC loves Mkk 二分答案 单调队列
    bzoj3643 Phi的反函数 数学 搜索
    有一种恐怖,叫大爆搜
    BZOJ3566 概率充电器 概率dp
    一些奇奇怪怪的过题思路
  • 原文地址:https://www.cnblogs.com/lizhitai/p/4476091.html
Copyright © 2020-2023  润新知