什么是代理模式?老板找了一个美女秘书,这个秘书就是这个老板的代理。有人给老板打电话由秘书帮忙接听,如果是骚扰电话就直接屏蔽。
代理模式为另一个对象提供一个替身以控制对这个对象的访问。代理模式有许多变体,如保护代理,远程代理,虚拟代理等等,但是都和“控制访问”有关。
此处我们以秘书帮老板接电话为例,分析下静态保护代理模式,整体类关系如下:

接电话uml
首先有一个动作接口
public interface Action {
/**
* 打电话
*
* @param name 名称
*/
void phone(String name);
}
老板和秘书都实现了这个动作
由于秘书需要连通老板,所以在秘书对象中组合一个老板
public class Boss implements Action {
@Override
public void phone(String name) {
System.out.println("您好,我是老板");
}
}
public class Secretary implements Action {
Action boss;
public Secretary(Action boss) {
this.boss = boss;
}
@Override
public void phone(String name) {
System.out.println("您好,我是老板秘书!您是哪位?");
System.out.println("我是" + name + "!");
if ("张三".equals(name)) {
System.out.println("老板现正在开会,不方便接您电话!");
return;
}
System.out.println("好的,您稍等!");
boss.phone(name);
}
}
最后对通过秘书对来电进行控制
public class ProxyTest {
public static void main(String[] args){
Secretary secretary = new Secretary(new Boss());
secretary.phone("张三");
secretary.phone("李四");
}
}
输出结果:

输出结果