1. 程式人生 > >《大話設計模式》Java程式碼示例(四)之代理模式

《大話設計模式》Java程式碼示例(四)之代理模式

代理模式(Proxy):為其他物件提供一種代理以控制對這個物件的訪問。

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();

    }

}