【java設計模式】代理模式
阿新 • • 發佈:2017-05-14
pro 運行時間 cli .get aggregate stopped clas cnblogs dex
計算類中方法運行時間的幾種方案:
Client:
1 package com.tn.proxy; 2 3 public class Client { 4 public static void main(String[] args) { 5 /* Car car=new Car(); 6 car.move(); */ 7 8 //通過繼承計算方法的運行時間 9 /* CarTimeByExtends ctp=new CarTimeByExtends(); 10 ctp.move();*/ 11 12 //通過聚合計算類中方法運行時間 13 /* Car car=new Car(); 14 CarTimeByAggregate ctba=new CarTimeByAggregate(car); 15 ctba.getCarRunningTime(); */ 16 } 17 }
Movable:
1 package com.tn.proxy; 2 3 public interface Movable { 4 void move(); 5 void stop(); 6 }
Car:
1 package com.tn.proxy; 2 3 import java.util.Random; 4 5 public class Car implements Movable { 6 7 @Override 8 public void move() { 9 /** 10 * 方法內的兩段註釋代碼為給move()方法增加日誌及計算方法執行時間。 11 */ 12 /* long start=System.currentTimeMillis(); 13 System.out.println("Car is start moving..."+start);*/ 14 System.out.println("Car is moving..."); 15 try { 16 Thread.sleep(new Random().nextInt(1500)); 17 } catch (InterruptedException e) { 18 e.printStackTrace(); 19 } 20 /* long end=System.currentTimeMillis(); 21 System.out.println("Car is stop moving..."+end); 22 System.out.println("Car running time is "+(end-start)); */ 23 } 24 25 @Override 26 public void stop() { 27 System.out.println("Car is stopped."); 28 } 29 30 }
CarTimeByExtends:
1 package com.tn.proxy; 2 /** 3 * 通過繼承計算類中方法的運行時間 4 * @author xiongjiawei 5 * 6 */ 7 public class CarTimeByExtends extends Car{ 8 @Override 9 public void move() { 10 long start=System.currentTimeMillis(); 11 super.move(); 12 long end=System.currentTimeMillis(); 13 System.out.println("Car running time is:"+(end-start)); 14 } 15 }
CarTimeByAggregate:
1 package com.tn.proxy; 2 /** 3 * 通過聚合計算方法運行時間 4 * @author xiongjiawei 5 * 6 */ 7 public class CarTimeByAggregate { 8 Car car; 9 10 public CarTimeByAggregate(Car car){ 11 this.car=car; 12 } 13 14 public void getCarRunningTime(){ 15 long start=System.currentTimeMillis(); 16 car.move(); 17 long end=System.currentTimeMillis(); 18 System.out.println("Car running time is:"+(end-start)); 19 } 20 }
通過靜態代理實現以上功能:
Client:
1 package com.tn.proxy; 2 3 public class Client { 4 public static void main(String[] args) { 5 Car car=new Car(); 6 CarTimeProxy ctp=new CarTimeProxy(car); 7 CarLogProxy clp=new CarLogProxy(ctp); 8 clp.move(); 9 /* 運行結果:Car被時間包裝,時間被日誌包裝 10 logging... 11 start time:1494730233358 12 Car is moving... 13 end time:1494730234835 14 logged. 15 */ 16 System.out.println("--------------------------------------"); 17 Movable clp2=new CarLogProxy(car); 18 Movable ctp2=new CarTimeProxy(clp2); 19 ctp2.move(); 20 /* 21 運行結果:時間包裝日誌,日誌包裝car 22 start time:1494730473747 23 logging... 24 Car is moving... 25 logged. 26 end time:1494730474995 27 */ 28 } 29 }
Movable:
1 package com.tn.proxy; 2 3 public interface Movable { 4 void move(); 5 }
Car:
1 package com.tn.proxy; 2 3 import java.util.Random; 4 5 public class Car implements Movable { 6 7 @Override 8 public void move() { 9 System.out.println("Car is moving..."); 10 try { 11 Thread.sleep(new Random().nextInt(1500)); 12 } catch (InterruptedException e) { 13 e.printStackTrace(); 14 } 15 } 16 }
CarTimeProxy:
1 package com.tn.proxy; 2 3 public class CarTimeProxy implements Movable{ 4 Movable movable; 5 public CarTimeProxy(Movable movable){ 6 this.movable=movable; 7 } 8 @Override 9 public void move() { 10 long start=System.currentTimeMillis(); 11 System.out.println("start time:"+start); 12 movable.move(); 13 long end=System.currentTimeMillis(); 14 System.out.println("end time:"+end); 15 } 16 }
CarLogProxy:
1 package com.tn.proxy; 2 3 public class CarLogProxy implements Movable { 4 Movable movable; 5 6 public CarLogProxy(Movable movable){ 7 this.movable=movable; 8 } 9 10 @Override 11 public void move() { 12 System.out.println("logging..."); 13 movable.move(); 14 System.out.println("logged."); 15 } 16 17 }
【java設計模式】代理模式