java静态代理模式

简述:
为其他对象提供一种代理,以控制对这个对象的访问。
代理对象起到中介的作用,可以去掉某些功能,也可以增加某些功能。

常见的代理模式:
虚拟代理:
当我们在浏览帖子的时候,很多帖子的图片刚开始都是默认网站logo,当图片加载完成的时候才会去显示出来,在图片被加载的时候,也不会影响我们去看文字。

代理模式分为静态代理和动态代理。

静态代理:
代理和被代理对象在代理之前是确定的,他们都实现相同的接口或者继承相同的抽象类。


下面我们用静态代理做一个小Demo
假如我们有一辆车,然后我们通过静态代理来记录这辆车行驶的时间。

首先写一个汽车的接口,增加行驶的方法:

public interface Moveable {

    //增加一个行驶的接口
    void move();
}

创建汽车类,实现move方法:

public class Car implements Moveable {

    @Override
    public void move() {

        //实现开车,开车时间为1秒钟
        try {
            Thread.sleep(new Random().nextInt(1000));
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

最后我们创建一个Car2类,继承Car类,重写move()方法,并且在实现的前后增加业务:

    @Override
    public void move() {
        long starttime = System.currentTimeMillis();
        System.out.println("汽车开始行驶...");
        super.move();
        long endtime = System.currentTimeMillis();
        System.out.println("汽车结束行驶...");
        System.out.println("汽车行驶时间:" + (endtime - starttime) + "毫秒!");
    }

    public static void main(String[] args) {
        Moveable m = new Car2();
        m.move();
    }
}

输出结果:

汽车开始行驶...
汽车结束行驶...
汽车行驶时间:868毫秒!

以上也就是用继承的方法,简单的实现静态代理,在汽车行驶的时候增加记录时间的业务,但不推荐用继承的方法实现代理,如果业务逻辑很多的话,代码也会无限的膨胀下去。

你可能感兴趣的:(java静态代理模式)