zoukankan      html  css  js  c++  java
  • 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()
  • 相关阅读:
    mysql 从库执行insert失败导致同步停止
    MySQL 占用cpu 100%
    MySQl 主从配置实战
    tomcat 线程数与 mysql 连接数综合调优
    mysql 数据迁移
    Windows系统上设置 Git Bash 的 Font 及 Locale
    java -jar 使用要点
    ConcurrentHashMap 从Java7 到 Java8的改变
    sql索引组织
    注册、启动、停止windows服务
  • 原文地址:https://www.cnblogs.com/lizhitai/p/4476091.html
Copyright © 2011-2022 走看看