《大话设计模式》Java代码示例(四)之代理模式

代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问。

《大话设计模式》Java代码示例(四)之代理模式

package proxy;

/**
 * 代理模式(Proxy)
 * 被追求者类
 */
public class SchoolGirl {

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}
package proxy;

/**
 * 代理模式(Proxy)
 * 代理接口
 */
public interface GiveGift {

    void giveDolls();

    void giveFlowers();

    void giveChocolate();

}
package proxy;

/**
 * 代理模式(Proxy)
 * 追求者类
 */
public class Pursuit implements GiveGift {

    SchoolGirl mm;

    public Pursuit(SchoolGirl mm) {
        this.mm = mm;
    }

    @Override
    public void giveDolls() {
        System.out.println("Hi," + mm.getName() + ",送你个娃娃,请收下。");
    }

    @Override
    public void giveFlowers() {
        System.out.println("Hi," + mm.getName() + ",送你束鲜花,请收下。");
    }

    @Override
    public void giveChocolate() {
        System.out.println("Hi," + mm.getName() + ",送你盒巧克力,请收下。");
    }

}
package proxy;

/**
 * 代理模式(Proxy)
 * 代理类
 */
public class Proxy implements GiveGift {

    Pursuit gg;

    public Proxy(SchoolGirl mm) {
        this.gg = new Pursuit(mm);
    }

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

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

    @Override
    public void giveChocolate() {
        gg.giveChocolate();
    }

}
package proxy;

/**
 * 代理模式(Proxy)
 * 客户端main方法
 */
public class Client {

    public static void main(String[] args) {
        SchoolGirl mm = new SchoolGirl();
        mm.setName("小龙女");

        Proxy proxy = new Proxy(mm);

        proxy.giveDolls();
        proxy.giveFlowers();
        proxy.giveChocolate();

    }

}