(一)模式概述
代理模式指为其他对象提供一种代理方式以控制对某个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。代理模式可以屏蔽用户真正请求的目标对象,是用户程序和目标对象解耦。
(二)模式结构
1)抽象角色:
通过接口或抽象类声明真实角色实现的业务方法。
2)真实角色:
实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用。
3)代理角色:
实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。
(注)代理模式的目的是在不改变接口的前提下,控制对象的访问。
(三)Demo
抽象角色
public interface ISource {
public void method();
}
真实角色
public class Source implements ISource{
@Override
public void method() {
System.out.println("this is Source method!");
}
}
代理角色:
public class Proxy implements ISource {
Source ps;
// 此处真实对象ProxySource不能作为参数传入,目的是为了隐藏客户端对真实参数的应用
public Proxy() {
super();
ps = new Source();
}
@Override
public void method() {
System.out.println("代理前操作");
ps.method();
System.out.println("代理后操作");
}
}
执行过程:
public static void main(String[] args) {
Proxy p = new Proxy();
p.method();
}
执行结果:代理前操作
this is Source method!
代理后操作