代理模式(proxy)是一种设计模式,为某一个对象提供一个代理对象,并由代理对象控制被代理对象的访问。通俗来讲,代理模式就是我们生活中常见的中介。
代理模式主要包含以下3个角色:
(1)Subject(抽象主题角色):声明真实主题和代理主题的共同的接口或者是继承相同的父类,这样在任何使用真实主题对象的地方都可以用代理主题对象替代。
(2)Proxy(代理主题角色):代理主题角色内部包含了对真实主题角色的引用,从而可以在任何时候操作真实主题对象。
(3)RealSubject(真实主题角色):定义了代理主题角色所代理的真实主题对象(被代理对象),在真实主题角色中实现了真实的业务操作。
例如,顾客虽然可以直接找出版社买书,但更多的是通过书店去买。顾客通过书店买书就是一个代理模式,顾客是客户,书店扮演代理主题角色,而出版社才是真实主题角色,出版社真正卖书,其他附加的事情就交给书店代理去做,书店会在适当时机调用出版社卖书功能。
代理模式结构如图12-7所示。(www.xing528.com)
图12-7 代理模式结构
使用代理模式有如下好处:
(1)中介隔离作用:在某些情况下,一个Client不想或者不能直接引用一个RealSubject对象,而Proxy对象可以在Client和RealSubject对象之间起到中介作用,其特征是Proxy类和RealSubject类实现相同的接口。
(2)开闭原则,增加功能:Proxy主要负责为RealSubject预处理消息、过滤消息、把消息转发给RealSubject,以及事后对返回结果的处理等。Proxy除了是Client和RealSubject的中介之外,还可以通过给Proxy增加额外的功能来扩展RealSubject的功能,这样可以只修改Proxy而无须修改RealSubject,符合代码设计的开闭原则。
按照代理创建的时期来分类,代理可以分为静态代理和动态代理。静态代理是由程序员创建或特定工具自动生成源代码,再对其编译。在程序运行之前,代理类的.class文件已经被创建,代理主题类和真实主题类的关系在运行前就确定了。而动态代理是在程序运行时通过反射机制动态创建的。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。