java代理模式
1 静态代理
静态代理:这个比较简单,
总体上来说就是通过实现接口的形式来实现的。
比如一个接口Icar,这个接口有run()方法,Car这个类实现了Icar这个方法,但是现在由于某种原因不能够修改Car这个类,且要在Car这个类执行run()方法的前后记下日期,那么这种场景就可以使用代理模式实现这个场景的需求。具体代码如下:
ICar:
1 package com.wyl.bean; 2 3 public interface ICar { 4 public void run(); 5 }
Car:
1 package com.wyl.bean; 2 /** 3 * Car实现ICar接口的run()方法.. 4 * @author Wei 5 * 6 */ 7 public class Car implements ICar{ 8 public String name; 9 public Car(String name){ 10 this.name = name; 11 } 12 @Override 13 public void run() { 14 // TODO Auto-generated method stub 15 System.out.println(name+"Car开始run..."); 16 } 17 18 }
StaticProxyCar,静态代理类
1 package com.wyl.bean; 2 3 /** 4 * 静态代理,此例中代理的是Car这个类,而Car实现的是ICar这个接口, 5 * 所以该代理类也要实现ICar这个接口 6 * @author Wei 7 */ 8 public class StaticProxyCar implements ICar { 9 ICar car; 10 11 public StaticProxyCar(Car car) { 12 this.car = car; 13 } 14 15 @Override 16 public void run() { 17 System.out.println("我是ProxyCar,发动前..."); 18 long t1 = System.nanoTime(); 19 // 调用被代理类的run()方法... 20 car.run(); 21 long t2 = System.nanoTime(); 22 long t = t2 - t1; 23 System.out.println("我是ProxyCar,发动后...,run的时长:" + t + "纳秒"); 24 } 25 26 }
测试类MyTest:
1 package com.wyl.test; 2 3 import com.wyl.bean.Car; 4 import com.wyl.bean.StaticProxyCar; 5 6 public class MyTest { 7 public static void main(String[] args) { 8 StaticProxyCar mproxyCar = new StaticProxyCar(new Car("Luxes")); 9 mproxyCar.run();// 静态代理 10 } 11 }
控制台输出:
我是ProxyCar,发动前...
DazhongCar开始run...
我是ProxyCar,发动后...,run的时长:184319纳秒