<四>读<<大话设计模式>>之代理模式

 

        代理模式我想大家即便不熟悉也都听过吧,从字面意思上看就是替别人干活的,比如代理商。在项目的实际应用中也有很多地方用到,比如spring通过代理模式生成对象等。

代理模式的书面定义:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。

        在《《大话设计模式》》一书中以一个有男朋友的女孩让“小菜”帮忙修电脑的故事展开的,其实说白了代理就是帮别人干活的,一般老板不出面,都是小弟帮忙做交易。代理模式很好理解也很好懂,那就直接来代码吧

1、要追求的姑娘

/*

 * 被追求的女孩

 */

publicclass Girl {

 

    private String name;

 

    public String getName() {

       returnname;

    }

 

    publicvoid setName(String name) {

       this.name = name;

    }

   

}

2、真正的追求者

/*

 * 真实的追求者

 */

publicclass Pursuit implements GiveGift {

 

    //礼物当然送给女孩了

    protected Girl girl;

   

    public Pursuit(Girl girl){

       this.girl = girl;

    }

   

    publicvoid giftChocolate() {

       // TODO Auto-generated method stub

       System.out.println("送巧克力给"+girl.getName());

    }

 

    publicvoid giftFlowers() {

       // TODO Auto-generated method stub

       System.out.println("送花给"+girl.getName());

    }

 

}

3、代理中间人

/*

 * 代理类

 */

 

publicclass Proxy implements GiveGift {

 

    protected Pursuit pursuit;

   

    //毕竟是代理,真正的还是追求者与女孩的联系

    public Proxy(Girl girl){

       pursuit = new Pursuit(girl);

    }

   

    publicvoid giftChocolate() {

       // TODO Auto-generated method stub

       pursuit.giftChocolate();

    }

    //花其实是追求者的

    publicvoid giftFlowers() {

       // TODO Auto-generated method stub

       pursuit.giftFlowers();

    }

 

}

 

4、客户端

publicclass ProxyClient {

 

    /**

     * @param args

     */

    publicstaticvoid main(String[] args) {

       // TODO Auto-generated method stub

 

       Girlgirl = new Girl();

       girl.setName("妹妹");

      

       //真正操作的是代理

       Proxyproxy =  new Proxy(girl);

       proxy.giftChocolate();

       proxy.giftFlowers();

    }

 

}

 

代理模式都在什么场合应用呢?(摘自网络)

1) 远程代理(Remote  Proxy)为一个位于不同的地址空间的对象提供一个本地的代理对象。这个不同的地址空间可以是在同一台主机中,也可是在另一台主机中,远程代理又叫做大使(Ambassador)
2) 虚拟代理(Virtual Proxy)根据需要创建开销很大的对象。如果需要创建一个资源消耗较大的对象,先创建一个消耗相对较小的对象来表示,真实对象只在需要时才会被真正创建。 
3) 保护代理(Protection Proxy)控制对原始对象的访问。保护代理用于对象应该有不同的访问权限的时候。
4) 智能指引(Smart Reference)取代了简单的指针,它在访问对象时执行一些附加操作。
5) Copy-on-Write代理:它是虚拟代理的一种,把复制(克隆)操作延迟到只有在客户端真正需要时才执行。一般来说,对象的深克隆是一个开销较大的操作,Copy-on-Write代理可以让这个操作延迟,只有对象被用到的时候才被克隆。

 

总结:本章代理模式很好理解,代码也非常简单,在这里说一下它的有点吧。职责清晰,真实的角色就是实现实际的业务逻辑,不用关心其他非本职责的事务,通过后期的代理完成一件完成事务,附带的结果就是编程简洁清晰。代理对象可以在客户端和目标对象之间起到中介的作用,这样起到了的作用和保护了目标对象的作用。还有就是高扩展性

 

你可能感兴趣的:(java,设计模式,代理模式)