设计模式之代理模式
定义:为其他对象提供一种代理以控制对这个对象的访问。(也就是在对象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---------
微信分享/微信扫码阅读
微信分享/微信扫码阅读