代理模式

    xiaoxiao2021-03-30  28

    代理模式

    静态代理

    继承方式实现

    public interface Moveable { void move(); } public class Car implements Moveable { @Override public void move() { // 实现开车 try { System.out.println("汽车行驶中..."); Thread.sleep(new Random().nextInt(1000)); } catch (InterruptedException e) { e.printStackTrace(); } } } public class Car2 extends Car { @Override public void move() { long startTime = System.currentTimeMillis(); System.out.println("汽车开始行驶"); super.move(); long endTime = System.currentTimeMillis(); System.out.println("结束行驶,行驶了"+(endTime-startTime)+"ms"); } } public static void main(String[] args) { Car2 car2 = new Car2(); car2.move(); }

    聚合方式实现

    public class Car3 implements Moveable { private Car car; public Car3(Car car) { super(); this.car = car; } @Override public void move() { long startTime = System.currentTimeMillis(); System.out.println("汽车开始行驶"); car.move(); long endTime = System.currentTimeMillis(); System.out.println("结束行驶,行驶了" + (endTime - startTime) + "ms"); } } public static void main(String[] args) { Car car = new Car(); Moveable m = new Car3(car); m.move(); }

    jdk动态代理

    public class TimeHandler implements InvocationHandler { private Object target; public TimeHandler(Object target) { super(); this.target = target; } /** * @param proxy 被代理的对象 * @param method 被代理对象的方法 * @param args 方法的参数 * @return Object 方法的返回值 */ @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { long startTime = System.currentTimeMillis(); System.out.println("汽车开始行驶"); method.invoke(target); long endTime = System.currentTimeMillis(); System.out.println("结束行驶,行驶了"+(endTime-startTime)+"ms"); return null; } } public static void main(String[] args) { Car car = new Car(); InvocationHandler h = new TimeHandler(car); Class<?> c = car.getClass(); Moveable m = (Moveable) Proxy.newProxyInstance(c.getClassLoader(), c.getInterfaces(), h); m.move(); }
    转载请注明原文地址: https://ju.6miu.com/read-665085.html

    最新回复(0)