静态代理的实现
发布时间:
代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象,这样做的好处是可以在目标对象实现的基础上,增强额外的功能操作扩展目标对象的功能。
在日常生活中我们为什么需要代理?以学习为例,学习的流程是拿出书包来,把书掏出来,准备好纸笔,然后开始学习,等学完了还得收拾书,把书塞回书包里,还得整理一下书包,这是一个完整的学习的过程。但是我很懒,不想动弹,只想学习,那可能就得让妈妈帮我把书包拿过来,把书打开,我只管学习就好了,学完以后,妈妈再帮我把书整理好放回去。在这里,妈妈就代表了一个代理对象,要学习的人是我,而我只管学习,这样效率才最高,至于其他的交给代理对象做就好了。
从实现上来看,静态代理类不具备真实主题类处理真正请求的能力,因此需要将请求交给真实主题对象处理;为了获取真是主题类的能力,代理类可以继承真实主题类,或者组合真实主题对象。
即使通过继承可以满足需求,但是由于继承不如组合灵活,采用组合会更好一些。由此,静态代理的实现步骤一般为(主题接口Subject, 真实主题对象类RealSubject一般都是存在的):
创建代理类,实现主题接口Subject;代理类持有真实主题对象类的引用;代理类实现主题接口Subject的方法,并委托给引用的真实主题对象类处理。
要为一项耗时操作计时,最直观的做法是在耗时操作前后打印当前时间,但是这样的代码不利于维护。使用代理模式,从设计上首先需要为计时操作创建接口,即主题接口实现主题接口,即真实主题类提供真正的耗时操作代理类组合真是主题类实例,实现主题接口客户端使用代理类完成耗时任务请求。
推荐阅读
更多>