java 代理模式

來源:互聯網
上載者:User

標籤:

今天聽代理模式的一點總結:

 

建立一個介面

package com.proxy;public interface MoveAble {    void move();}

 

建立一個tank類 實現MoveAble

package com.proxy;import java.util.Random;public class Tank implements MoveAble{    @Override    public void move() {        // TODO Auto-generated method stub        System.out.println("坦克正在運行");        try {            new Thread().sleep(new Random().nextInt(10000));        } catch (InterruptedException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }}

 

要記錄move這個方法的執行時間 我們有兩種方法可以實現

 

 

package com.proxy;/** * 通過繼承的方式實現代理 * 繼承方式不靈活   如果要添加記錄日誌功能的時候 要建立一個類  繼承tank2 * 重寫move 方法 在裡面添加記錄日誌的功能   如果要添加n多個功能 要建立n多個類  產生 * 類爆炸 */public class Tank2 extends Tank {        /**     * 要計運算元類方法的執行時間     */    @Override    public void move() {                long start =System.currentTimeMillis();        super.move();//tank2也是一個代理  調用他實際上調用的是他父類的方法        long end  = System.currentTimeMillis();        System.out.println("time:   "+(end-start));    }        }

 

 

 

第二種方法    impl

 

package com.proxy;/* * 一個類裡面有另外一個類的實現  彙總 */public class TankLogProxy implements MoveAble{            Tank t;//要測試的對象  這個對象的方法和 這個類的方法一樣  調用別人的方法    //TankLogProxy  是t 的一個代理    public TankLogProxy(Tank t) {        super();        this.t = t;    }    @Override    public void move() {        System.out.println("tank start");        t.move();        System.out.println("tank stop");    }}

 

 

測試

 

package com.proxy;public class doMain {    public static void main(String[] args) {                MoveAble m = new Tank2();        m.move();//調用的是他父類的方法        MoveAble m1 = new TankTimeProxy(new Tank());        m1.move();    }}

 

更推薦繼承的方式進行實現

===================分割線=========================

 

如果想添加記錄日誌的功能  我們使用彙總的方式就比較簡單靈活了

TankTimeProxy 修改如下

package com.proxy;/* * 一個類裡面有另外一個類的實現  彙總 */public class TankTimeProxy implements MoveAble{    MoveAble t;    public TankTimeProxy(MoveAble t) {        super();        this.t = t;    }    @Override    public void move() {        // TODO Auto-generated method stub                long start =System.currentTimeMillis();        t.move();        long end  = System.currentTimeMillis();        System.out.println("time:   "+(end-start));            }}

添加  TankLogProxy

package com.proxy;/* * 一個類裡面有另外一個類的實現  彙總 */public class TankLogProxy implements MoveAble{            MoveAble t;//   MoveAble 有 move 方法 可以代理所有MoveAble 的內容    public TankLogProxy(MoveAble t) {        super();        this.t = t;    }    @Override    public void move() {        System.out.println("tank start");        t.move();        System.out.println("tank stop");    }}

測試

package com.proxy;public class doMain {    public static void main(String[] args) {                //        Tank tank =new Tank();//        TankTimeProxy ttp = new TankTimeProxy(tank);//        MoveAble m = ttp;//        m.move();//調用的是時間代理對象 內部調用的是   傳進入的Tank tank =new Tank(); 對象的move 方法                        //如果我們要移動的時添加記錄日誌的功能        Tank t =new Tank();        TankTimeProxy tankTimeProxy  = new TankTimeProxy(t);        TankLogProxy tankLogProxy = new TankLogProxy(tankTimeProxy);        MoveAble m1 = tankLogProxy;        m1.move();            }}

 

java 代理模式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.