设计模式之代理模式

定义:为其他对象提供一种代理以控制对这个对象的访问。(也就是在对象A中的方法a中调用对象B的方法a)。

该种模式的思想是通过一个中间代理来访问原对象,从而在不改变目标对象的基础上,增强原对象的功能,且间化目标对象的访问方式。

应用场景:有远程代理,安全代理,虚拟代理等等。

Python实现:

 import time

class Manager():

    def work(self):
        print 'manager is working'

class Proxy():

    def __init__(self):
        self.busy = None

    def work(self):
        if self.busy is not None:
            manager = Manager()
            manager.work()
        else:
            print 'manager wants to talk with his employees'


p = Proxy()
p.work()
p.busy = 'yes'
p.work()

上述的Proxy就是一个典型的代理,我们想要调用原对象的work方法,不需要通过调用其实例,且在不改变原对象的基础上增强其功能。

实际应用:在Flask-Cache中其实就使用了代理模式。代码如下(由于比较多,我就简化不必要的代码:

class Cache(object):
    """
    This class is used to control the cache objects.
    """

    def __init__(self, app=None, with_jinja2_ext=True, config=None):
       self.cache = app.extensions['cache']
       def get(self, *args, **kwargs):
    "Proxy function for internal cache object."
    return self.cache.get(*args, **kwargs)

def set(self, *args, **kwargs):
    "Proxy function for internal cache object."
    self.cache.set(*args, **kwargs)

def add(self, *args, **kwargs):
    "Proxy function for internal cache object."
    self.cache.add(*args, **kwargs)

Cache类实现了Flask内部的缓存类,代理实现内部缓存类的方法。

--------EOF---------
微信分享/微信扫码阅读