<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.利用繼承
    如果不能在原來類上添加函數。則可以利用新建類繼承extends原來類,重寫方法,在super.方法前后加入此函數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實現接口函數,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、利用聚合實現多個代理。下面寫時間代理(運行的時間)和日志代理(打印),可以通過改變client類上代理調用順序來改變出現的順序
    ------------- 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 兔小翊 閱讀(130) 評論(0)  編輯  收藏

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


    網站導航:
    博客園   IT新聞   Chat2DB   C++博客   博問  
     
    主站蜘蛛池模板: 免费a级黄色毛片| 久久电影网午夜鲁丝片免费| 免费A级毛片无码A| 国产亚洲精品91| 国产成人一区二区三区免费视频| 久久精品国产亚洲av麻豆蜜芽 | 亚洲情XO亚洲色XO无码| 成年人网站免费视频| 亚洲va久久久噜噜噜久久天堂| 3344在线看片免费| 亚洲三级电影网址| 久久精品无码专区免费青青| 久久久婷婷五月亚洲97号色| 99久久免费精品视频| 亚洲黄色在线观看视频| 成年黄网站色大免费全看| 亚洲影院天堂中文av色| 成人免费无码大片a毛片软件 | 亚洲精品狼友在线播放| A片在线免费观看| 亚洲精品国产情侣av在线| 丁香花免费完整高清观看| 亚洲Av永久无码精品黑人| 蜜桃精品免费久久久久影院| 特级毛片全部免费播放| 亚洲一区二区三区偷拍女厕| 99在线在线视频免费视频观看| 亚洲AV综合色区无码二区偷拍| 免费毛片在线播放| 四虎影视久久久免费| 亚洲电影国产一区| 高潮毛片无遮挡高清免费| 亚洲欧洲日产国码无码久久99| 99久久精品免费视频| 亚洲精品无码久久久久A片苍井空 亚洲精品无码久久久久YW | 亚洲AV无码乱码在线观看富二代| 亚洲美女免费视频| 亚洲大码熟女在线观看| 狠狠色伊人亚洲综合成人| 动漫黄网站免费永久在线观看| 理论秋霞在线看免费|