设计模式代理模式详解 (干货店加盟模式)

什么是代理模式?老板找了一个美女秘书,这个秘书就是这个老板的代理。有人给老板打电话由秘书帮忙接听,如果是骚扰电话就直接屏蔽。

代理模式为另一个对象提供一个替身以控制对这个对象的访问。代理模式有许多变体,如保护代理,远程代理,虚拟代理等等,但是都和“控制访问”有关。

此处我们以秘书帮老板接电话为例,分析下静态保护代理模式,整体类关系如下:

干货代理怎么做,干货店运营模式

接电话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("李四");
    }
}

输出结果:

干货代理怎么做,干货店运营模式

输出结果