zoukankan      html  css  js  c++  java
  • Python设计模式——代理模式(Proxy)

    书中的例子是:男A喜欢女A,但是不敢向其表白,所以委托男B为代理,代他送礼物给女A,实现这个需求的重点是,男A和女A是不互相直接接触的,都是通过代理男B,实现间接接触。

    #encoding=utf-8
    __author__ = 'kevinlu1010@qq.com'
    from abc import ABCMeta, abstractmethod
    
    
    class FemaleA():
        def __init__(self, name):
            self.name = name
    
    
    class Male():
        __metaclass__ = ABCMeta
    
        @abstractmethod
        def send_flower(self):
            pass
    
        @abstractmethod
        def send_chocolate(self):
            pass
    
        @abstractmethod
        def send_book(self):
            pass
    
    
    class MaleA(Male):
        def __init__(self, name, love_female):
            self.name = name
            self.love_female = FemaleA(love_female)
    
        def send_flower(self):
            print '%s送花给%s' % (self.name, self.love_female.name)
    
        def send_chocolate(self):
            print '%s送巧克力给%s' % (self.name, self.love_female.name)
    
        def send_book(self):
            print '%s送书给%s' % (self.name, self.love_female.name)
    
    
    class Proxy(Male):
        def __init__(self, name, proxyed_name, love_female):
            self.name = name
            self.proxyed = MaleA(proxyed_name, love_female)
    
        def send_flower(self):
            self.proxyed.send_flower()
    
        def send_chocolate(self):
            self.proxyed.send_chocolate()
    
        def send_book(self):
            self.proxyed.send_book()
    
    
    if __name__ == '__main__':
        p = Proxy('男B', '男A', '女A')
        p.send_book()
        p.send_chocolate()
        p.send_flower()

    代理模式的应用场景:

    1.远程代理,也就是为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实。

    2.虚拟代理,是根据需要创建开销大的对象。通过它来存放实例化需要很长时间的真是对象,例如html中,图片需要load很久,所以通过虚拟代理来代替真实的图片

    3.安全代理,用来控制真实对象访问时的权限

    4.智能指引,是指当调用真实的对象时,代理处理另外一些事

  • 相关阅读:
    【转】全国各地做生意十年的心得,忍不住上来感慨一下,诚信才是根基!
    pbootcms常用标签
    wordpress常用标签
    表格
    dedecms忘记后台密码
    新手建站基础步骤
    zblog常用插件及操作步骤
    织梦建站如何添加视频文件
    #Centos7.4#Shell中判断语句if中-z至-d的意思
    #Centos7.4#Linux虚拟机KVM配置网卡【Requested operation is not valid: network 'br0' is not active】
  • 原文地址:https://www.cnblogs.com/Xjng/p/3878839.html
Copyright © 2011-2022 走看看