每天一设计模式之代理模式

来源:互联网 发布:2017淘宝红包口令多少 编辑:程序博客网 时间:2024/05/22 06:12
<script type="text/javascript"><!--google_ad_client = "pub-9528830580198364";/* 大矩形336x280, 创建于 09-5-28 */google_ad_slot = "4731086345";google_ad_width = 336;google_ad_height = 280;//--></script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>

 

每天一设计模式之代理模式

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

代理模式结构图:

代理模式结构图

代码来源:大话设计模式

代码样例:送MM礼物

 

SchoolGirl:

package test;

public class SchoolGirl {
    private String name;

    public String getName() {
        return name;
    }

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

}

送礼物:

package test;

public interface GiveGift {
    void GiveDolls();
    void GiveFlowers();
    void GiveChocolate();
}

具体送礼物:

package test;

public class Pursuit implements GiveGift {

    private SchoolGirl mm;

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

    public void GiveChocolate() {
        System.out.println(mm.getName() + "给你巧克力");

    }

    public void GiveDolls() {
        System.out.println(mm.getName() + "给你洋娃娃");

    }

    public void GiveFlowers() {
        System.out.println(mm.getName() + "给你鲜花");

    }

}

代理:

package test;

public class Proxy implements GiveGift {

    private Pursuit pursuit;

    public Proxy(SchoolGirl mm) {
        pursuit = new Pursuit(mm);
    }

    public void GiveChocolate() {
        pursuit.GiveChocolate();
    }

    public void GiveDolls() {
        pursuit.GiveDolls();
    }

    public void GiveFlowers() {
        pursuit.GiveFlowers();
    }

}

测试:

package test;

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

        Proxy proxy = new Proxy(mm);
        proxy.GiveChocolate();
        proxy.GiveDolls();
        proxy.GiveFlowers();
    }
}

原创粉丝点击