1. 程式人生 > >【java設計模式】代理模式

【java設計模式】代理模式

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設計模式】代理模式