代理模式

代理模式的分类


代理模式的角色和结构

代理模式简单点说就是给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。

涉及三个角色:

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()中采取代理,一方面将调用传递给真实对象,另一方面执行各种需要做的操作。

posted @ 2012-01-17 15:19  NemoGu  阅读(184)  评论(0)    收藏  举报