讀之代理模式

 

        代理模式我想大家即便不熟悉也都聽過吧,從字面意思上看就是替別人幹活的,比如代理商。在項目的實際應用中也有很多地方用到,比如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代理可以讓這個操作延遲,只有對象被用到的時候才被克隆。

 

總結:本章代理模式很好理解,代碼也非常簡單,在這裏說一下它的有點吧。職責清晰,真實的角色就是實現實際的業務邏輯,不用關心其他非本職責的事務,通過後期的代理完成一件完成事務,附帶的結果就是編程簡潔清晰。代理對象可以在客戶端和目標對象之間起到中介的作用,這樣起到了的作用和保護了目標對象的作用。還有就是高擴展性

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章