大话设计模式之代理模式

来源:互联网 发布:java返回值是什么意思 编辑:程序博客网 时间:2024/05/29 11:20

参考—->程杰大神的《大话设计模式》—org
记一下一遍以后重复看时有新的理解,メモ

这里写图片描述

代理模式
在访问对象时引入一定的程度的间接性,因为这种间接性,可以附加多种用途。
代理模式应用-
1 远程代理 一个对象在不同的地址空间提供局部代表,这样可以隐藏一个对象存在于不同地址空间的事实。
2 虚拟代理 根据需要创建开销很大的对象,通过它来存放实例化需要很长时间的真是对象
3 安全代理 用来控制真实对象访问时的权限 一般用于对象应该有不同的访问权限
4 智能指引 指的是当调用真是对象时,代理处理另外一些事
実は 上記の場合はよくわからないが一応メモしておく
理解できない。。。
代码对应的UML图
这里写图片描述

一个送礼物的接口

public interface GiveGift {    void GiveDog();    void GiveCat();    void GivePig();}

实体类(代理要去替代的实体类)

/** * 此类是代理要真实访问的实体类 *  * */public class Pursuit implements GiveGift {    private SchoolGril sg;    public Pursuit(SchoolGril sg) {        super();        this.sg = sg;    }    @Override    public void GiveDog() {        // TODO Auto-generated method stub        System.out.println(sg.getName()+"----->GiveDog");    }    @Override    public void GiveCat() {        // TODO Auto-generated method stub        System.out.println(sg.getName()+"----->GiveCat");    }    @Override    public void GivePig() {        // TODO Auto-generated method stub        System.out.println(sg.getName()+"----->GivePig");    }}

接受礼物的人

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

代理类

public class Proxy implements GiveGift {/** *   在代理类中引用一个可以访问的实体,并提供一个与 *  Subject的接口相同的接口这样代理便可以替代实体 * */    Pursuit ps;    public Proxy(SchoolGril sg) {        super();        ps = new Pursuit(sg);    }    @Override    public void GiveDog() {        // TODO Auto-generated method stub        ps.GiveDog();    }    @Override    public void GiveCat() {        // TODO Auto-generated method stub        ps.GiveCat();    }    @Override    public void GivePig() {        // TODO Auto-generated method stub        ps.GivePig();    }}

测试类

public class TestProxy {    public static void main(String[] args) {        // TODO Auto-generated method stub        SchoolGril sGril=new SchoolGril();        sGril.setName("tom");        /**         * 直接通过代理给这个女生礼物         * */        Proxy proxy = new Proxy(sGril);        proxy.GiveDog();        proxy.GiveCat();        proxy.GivePig();    }}

输出结果
这里写图片描述

原创粉丝点击