Java设计模式:代理模式
【尊重原创,转载请注明出处】http://blog.csdn.net/guyuealian/article/details/52015707
Subject:抽象主题角色,抽象主题类可以是抽象类,也可以是接口,是一个最普通的业务类型定义,无特殊要求。
RealSubject:具体主题角色,也叫被委托角色、被代理角色。是业务逻辑的具体执行者。
Proxy:代理主题角色,也叫委托类、代理类。它把所有抽象主题类定义的方法给具体主题角色实现,并且在具体主题角色处理完毕前后做预处理和善后工作。代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实对象相同的接口以便在任何时刻都能代替真实对象。同时,代理对象可以在执行真实对象操作时,附加其他的操作,相当于对真实对象进行封装。
RealSubject:具体主题角色,也叫被委托角色、被代理角色。是业务逻辑的具体执行者。
Proxy:代理主题角色,也叫委托类、代理类。它把所有抽象主题类定义的方法给具体主题角色实现,并且在具体主题角色处理完毕前后做预处理和善后工作。代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实对象相同的接口以便在任何时刻都能代替真实对象。同时,代理对象可以在执行真实对象操作时,附加其他的操作,相当于对真实对象进行封装。
就比如,我想找一份百度的工作,就有两种方式选择,(1)不用人帮忙,我自己瞎找(2)另外一种就是通过别人代理方式找,比如通过在百度工作的师兄师姐内推的方式,这种情况,只需要传递一个找工作的对象,告知师兄师姐代理就可以,师兄师姐帮你找到想要的工作,还可以推荐其他相关的工作给你,这就扩展原来的功能啦。
(1)接口:定义主题主要功能
/**
* 接口:定义主题主要功能
*/
public interface Object {
public abstract void operation();
}
(2)具体主题,真实的具体操作,但该操作不在客户端直接调用
/**
* 具体主题,真实的具体操作,但该操作不在客户端直接调用
*/
public class RealObject implements Object {
@Override
public void operation() {
System.out.println("在RealObject类中,真实的具体操作");
}
}
(3)代理类,代理真实的操作
/**
* 代理类,代理真实的操作
*/
public class ProxyObject implements Object {
private Object obj;
public ProxyObject(Object obj) {
this.obj = obj;// 设置代理的子类,即需要代理的真实对象
}
@Override
public void operation() {
// 调用目标对象之前可以做相关操作
System.out.println("在ProxyObject代理类中,调用目标对象之前可做相关的业务操作");
obj.operation();
// 调用目标对象之后可以做相关操作
System.out.println("在ProxyObject代理类中,调用目标对象之后还可做相关的业务操作");
}
}
(4)客户端程序
//客户端
public class Client {
public static void main(String[] args) {
System.out.println("---------不使用代理-------------");
Object obj;// 定义接口对象
obj = new RealObject();// 实例化真实的对象
obj.operation();// 直接使用真实类操作
System.out.println("---------使用代理-------------");
ProxyObject proxy = new ProxyObject(obj);// 传入代理的真实操作对象obj,由代理完成操作
proxy.operation();// 获得操作结果
}
}
输出:
---------不使用代理-------------
在RealObject类中,真实的具体操作
---------使用代理-------------
在ProxyObject代理类中,调用目标对象之前可做相关的业务操作
在RealObject类中,真实的具体操作
在ProxyObject代理类中,调用目标对象之后还可做相关的业务操作 说明:代理模式中,代理类ProxyObject和真实类RealObject都实现了接口的方法,不同的是代理类的操作方法operation(),不仅调用了真实类的操作,还扩展了业务功能,因此通过代理的模式,不仅可以实现真实的功能,还可以扩展业务功能。
本文介绍Java设计模式中的代理模式,包括其基本概念、实现步骤及应用场景。代理模式允许在不改变原有对象的前提下添加新的功能,适用于远程对象、创建开销大的对象或需要安全控制的对象。

被折叠的 条评论
为什么被折叠?



