<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-3  評論-0  文章-0  trackbacks-0
    設計模式之代理模式01
    問題:如何知道一個方法的運行時間:
    引出代理
    ----------------------
    1.直接在原來類上修改
    利用System.currentTimeMillis()
    public void Move() {
            
    long start=System.currentTimeMillis();
            System.out.println(
    "Tank Moving");
            
    try {
                Thread.sleep(
    new Random().nextInt(10000));
            } 
    catch (InterruptedException e) {            
                e.printStackTrace();
            }
            
    long end=System.currentTimeMillis();
            System.out.println(
    "time:"+(end-start));
            
        }


    2.利用繼承
    如果不能在原來類上添加函數(shù)。則可以利用新建類繼承extends原來類,重寫方法,在super.方法前后加入此函數(shù)System.currentTimeMillis()
    public class Tank2 extends Tank{
        @Override
        
    public void Move() {
            
    long start=System.currentTimeMillis();
            
    super.Move();
            
    long end=System.currentTimeMillis();
            System.out.println(
    "time2:"+(end-start));
        }
        
    }

    3.利用聚合。新建一個類B實現(xiàn)接口函數(shù),B類里面有需要測試的類A的對象。相當于B是A的一個代理。實際上,第二種方法也算是一個代理
    public class Tank3 implements Moveable{        
        
    public Tank3(Tank myt) {
            
    super();
            
    this.myt=myt;        
        }
        Tank myt;    
        
        @Override
        
    public void Move() {
            
    long start=System.currentTimeMillis();
            myt.Move();
            
    long end=System.currentTimeMillis();
            System.out.println(
    "time3:"+(end-start));
        }    
    }

    4、利用聚合實現(xiàn)多個代理。下面寫時間代理(運行的時間)和日志代理(打印),可以通過改變client類上代理調(diào)用順序來改變出現(xiàn)的順序
    ------------- Moveable .java-------------
    package mypro.cn;
    public interface Moveable {
        
    public void Move();
    }

    ---------------tank.java-----------
    package mypro.cn;
    import java.util.Random;
    public class Tank implements Moveable{

        
    public void Move() {
            System.out.println(
    "Tank Moving");
            
    try {
                Thread.sleep(
    new Random().nextInt(10000));
            } 
    catch (InterruptedException e) {            
                e.printStackTrace();
            }
            
        }
    }
    ----------- TankTimeProxy.java-------------------------
    package mypro.cn;
    import java.text.DateFormat;

    public class TankTimeProxy implements Moveable{        
        
    public TankTimeProxy(Moveable myt) {
            
    super();
            
    this.myt=myt;        
        }
        Moveable myt;    
        
        @Override
        
    public void Move() {
            
    long start=System.currentTimeMillis();
            java.util.Date date 
    = new java.util.Date();
            String currTime 
    = DateFormat.getDateTimeInstance().format(date);
            System.out.println(
    "starttime:"+currTime);
            myt.Move();
            
    long end=System.currentTimeMillis();
            System.out.println(
    "time:"+(end-start));
        }    
    }

    ------------------------- TankLogProxy .java-------------------------------
    package mypro.cn;

    public class TankLogProxy implements Moveable{        
        
    public TankLogProxy(Moveable myt) {
            
    super();
            
    this.myt=myt;        
        }
        Moveable myt;    
        
        @Override
        
    public void Move() {//日志代理
            System.out.println("tank start");
            myt.Move();        
            System.out.println(
    "tank stop");    }    
    }

    --------------------- Client .java----------------------------
    package mypro.cn;
    public class Client {
        
    public static void main(String[] args) {
            Tank t
    =new Tank();
            TankTimeProxy ttp
    =new TankTimeProxy(t);//先時間代理,即先包裝一層時間
            TankLogProxy tlp=new TankLogProxy(ttp);//再日志代理,最外層包裝日志
            Moveable m=tlp;
            m.Move();
        }
    }
     
    改變包裝順序,先包裝日志,再包裝時間:
     
        


    posted on 2012-06-28 22:16 兔小翊 閱讀(128) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導航:
     
    主站蜘蛛池模板: 中文无码日韩欧免费视频| 国产亚洲成在线播放va| 最近免费中文字幕大全高清大全1 最近免费中文字幕mv在线电影 | 少妇性饥渴无码A区免费| 亚洲综合另类小说色区色噜噜| 免费看一级毛片在线观看精品视频| 国产在线观看免费视频播放器| 久久精品国产亚洲av天美18| 免费国产成人高清视频网站| 羞羞视频免费观看| 久久精品国产精品亚洲人人| 中文无码日韩欧免费视频| 亚洲成人中文字幕| 2020久久精品国产免费| 亚洲人成网站在线播放2019 | 两个人看的www免费| 亚洲成AV人片在线观看ww| 鲁大师在线影院免费观看| 亚洲福利一区二区三区| 成人a视频片在线观看免费| 另类专区另类专区亚洲| 亚洲精品国产品国语在线| 18pao国产成视频永久免费| 亚洲中文无码永久免| 亚洲国产精品狼友中文久久久| 两性色午夜视频免费播放| 亚洲日本在线免费观看| 国产精品嫩草影院免费| a级毛片免费完整视频| 91亚洲性爱在线视频| 亚洲а∨天堂久久精品| 无码午夜成人1000部免费视频| 亚洲砖码砖专无区2023| 亚洲精品WWW久久久久久| 日韩插啊免费视频在线观看| 激情无码亚洲一区二区三区| 亚洲VA中文字幕无码毛片| 成人毛片18女人毛片免费96| 中文字幕免费播放| 亚洲码和欧洲码一码二码三码| 一本色道久久综合亚洲精品高清|