设计模式:代理模式


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

# 代理模式有3个必要的元素:
# 真实的对象(执行业务逻辑,被代理的对象)
# 代理类(用户请求的一个接口,对真实目标的保护)
# 用户(获取任务的用户请求)

# 代理模式存在在以下的情形中:
# 为真实目标类创建一个对象的代价是昂贵的,一个简单对象被代理类创建是便宜的方法。
# 对象必须防止被用户直接使用。
# 当实际请求的时候,为真实目标类创建一个对象会有延迟。

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

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...")
        print("Hello")


class Proxy(Manager):
    def __init__(self):
        self.busy = 'Yes'
        self.sales = None

    def work(self):
        print("Proxy checking for Sales Manager availability")

        count = 0
        while True:
            if self.busy == 'Yes':
                time.sleep(1)
                print("Sales Manager is busy, ", count, self.busy)
                count += 1
                if count == 3:
                    self.busy = 'No'
            else:
                self.sales = SalesManager()
                time.sleep(1)
                self.sales.talk()
                break


if __name__ == '__main__':
    p = Proxy()
    p.work()

  

 

posted @ 2020-08-20 18:08  Adamanter  阅读(72)  评论(0)    收藏  举报