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纳秒

原文地址:https://www.cnblogs.com/Sunnor/p/5640736.html