大话设计模式-代理模式的应用举例

版权声明:Leo.All Rights Reserved. https://blog.csdn.net/qq_41113081/article/details/88815663

该例子是大话设计模式课本上的举例,男孩通过一个代理去追求心目中的女神,对于理解代理模式很有帮助。 

/**
 * 被追求者 女神
 */
public class Girl {
    //名字
    private String name;

    public Girl() {
    }

    public Girl(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
/**
 * 送礼物接口
 * 代理和追求者都要实现该接口
 */
public interface IGiveGift {
    /**
     * 送的三种礼物
     */
    void giveDolls();
    void giveFlowers();
    void giveChocolate();
}
/**
 * 真实的追求者
 */
public class Pursuit implements IGiveGift {
    //被追的女孩
    private Girl girl;

    public Pursuit() {
    }

    public Pursuit(Girl girl) {
        this.girl = girl;
    }

    @Override
    public void giveDolls() {
        System.out.println(girl.getName() + " 送你洋娃娃");
    }

    @Override
    public void giveFlowers() {
        System.out.println(girl.getName() + " 送你鲜花");
    }

    @Override
    public void giveChocolate() {
        System.out.println(girl.getName() + " 送你巧克力");
    }
}
/**
 * 追求者请的代理 代替自己追求女神
 */
public class Proxy implements IGiveGift {
    //真实追求者
    private Pursuit pursuit;

    /**
     * 从构造方法开始 全都是直接调用的真实追求者的方法
     * 代理只是一个代理 没有自己的操作 只是帮别人完成任务
     *
     * @param girl
     */
    public Proxy(Girl girl) {
        pursuit = new Pursuit(girl);
    }

    @Override
    public void giveDolls() {
        pursuit.giveDolls();
    }

    @Override
    public void giveFlowers() {
        pursuit.giveFlowers();
    }

    @Override
    public void giveChocolate() {
        pursuit.giveChocolate();
    }
}
public class Main {
    public static void main(String[] args) {
        //被追求者
        Girl girl = new Girl("女神");
        //代理
        Proxy proxy = new Proxy(girl);
        //代理帮真实追求者 追求女孩
        proxy.giveDolls();
        proxy.giveFlowers();
        proxy.giveChocolate();
    }
}

运行结果:

女神 送你洋娃娃
女神 送你鲜花
女神 送你巧克力

猜你喜欢

转载自blog.csdn.net/qq_41113081/article/details/88815663