代理模式
代理模式的分类
代理模式的角色和结构
代理模式简单点说就是给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。
涉及三个角色:
1.真实主题角色(RealSubject):包含业务逻辑的具体实现方法
2.代理主题角色(ProxySubject):含有对真实主题角色的引用,负责在合适的时候创建实例,通过该引用来调用真实主题对象里各个功能方法。
代理角色常在将客户端调用传递给真实的主题之前或之后,都会执行某些附加操作,而不是单纯地将调用传递给真实主题对象。
3.抽象主题角色(AbstractSubject):为了可以在使用真实主题的地方使用代理主题,可以定义一个抽象类或接口,其中声明真实、代理主题角色都要实现的方法。
示例代码1:
见项目ProxyPattern下sample1
Java对代理模式的支持
java提供的这一支持建立在反射基础上
class java.lang.reflect.Proxy
class java.lang.reflect.Method
interface java.lang.reflect.InvocationHandler
示例代码2:
见项目ProxyPattern下sample2
思考
结合示例代码2,体会下面句话:
代理模式可能并不知道真正的被代理对象,而仅仅持有一个被代理对象的借口。这时候代理对象不能够创建被代理对象,被代理对象必须由系统的其他角色代为创建并且传入。
比较示例代码1,2 思考代理对象是如何创建的?被代理对象是在哪里创建?
可以按照下面步骤创建动态代理对象:
1.指明一系列的接口来创建一个代理对象
2.创建一个调用处理器(Invocation Handler)对象
3.将这个代理指定为某个其他对象的代理对象
4.在调用处理器的invoke()中采取代理,一方面将调用传递给真实对象,另一方面执行各种需要做的操作。

浙公网安备 33010602011771号