设计模式——代理模式

来源:互联网 发布:ubuntu安装ssh server 编辑:程序博客网 时间:2024/04/30 01:18

来人!我要报警,大话设计模式居然教程序员追妹子!今天继续学习了代理模式,现阶段感觉比较好理解,随着自己学习的深入相必会发现这个模式的优点。

1、定义:为其他对象提供一种代理以控制对这个对象的访问。

2、结构图:
代理模式结构图

3、程序示例:
首先建立subject接口:
IGiveGift类:

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

然后定义SchoolGirl类,也就是被追求者

public class SchoolGirl {    private String name;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }}

追求者类Pursuit(RealProject类)

public class Pursuit implements IGiveGift{    SchoolGirl mm;    public Pursuit(SchoolGirl mm){        this.mm = mm;    }    public void GiveDolls(){        System.out.println(mm.getName()+",送你洋娃娃");    }    public void GiveFlowers(){        System.out.println(mm.getName()+",送你鲜花");    }    public void GiveChocolate(){        System.out.println(mm.getName()+",送你巧克力");    }}

代理者,也就是帮忙递东西的代理Proxy类

public class Proxy implements IGiveGift{    Pursuit gg;    public Proxy(SchoolGirl mm){        gg = new Pursuit(mm);    }    public void GiveDolls(){        gg.GiveDolls();    }    public void GiveFlowers(){        gg.GiveFlowers();    }    public void GiveChocolate(){        gg.GiveChocolate();    }}

这里要注意,此类中的对象为真正的追求者也就是RealProject类。

程序测试Test类:

public class Test {    public static void main(String args[]){        SchoolGirl jiaojiao = new SchoolGirl();        jiaojiao.setName("娇娇");        Proxy daili = new Proxy(jiaojiao);        daili.GiveDolls();        daili.GiveFlowers();        daili.GiveChocolate();    }}

测试结果:
娇娇,送你洋娃娃
娇娇,送你鲜花
娇娇,送你巧克力

4、总结:(留下以后慢慢理解)
代理分类
(1)远程代理,也就是为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实。
(2)虚拟代理,是根据需要创建开销很大的对象,通过它来存放实例化需要很长时间的真是对象。
(3)安全代理,用来控制真是对象访问时的权限。
(4)智能指引,是指当前调用真是对象时,代理处理另外一些事。

最近天天在看书,希望能提高效率,随着学习的深入能提高领悟力。

0 0
原创粉丝点击