Java静态代理

应怜屐齿印苍苔,小扣柴扉久不开

为遵守Java的开闭原则(软件中的对象(类,模块,函数等等)应该对于扩展是开放的,但是对于修改是封闭的),如果对某一功能需要扩展,避免修改源代码,这时候就需要用到代理模式。

静态代理

首先定义一个接口:

/**
 * @author aRunner
 * @date 2020/5/11
 * 顶层接口
 */
public interface Person {
    /**
     *@author aRunner
     *@date 2020/5/11
     *@description 睡觉方法
     */
    public void sleep(String time) ;
    /**
     *@author aRunner
     *@date 2020/5/11
     *@description 吃饭方法
     */
    public void eat(String something) ;
}

然后编写需要被代理的类,实现上面那个接口


/**
 * @author aRunner
 * @date 2020/5/11
 */
public class Student implements Person{

    @Override
    public void sleep(String time) {
        System.out.println("Student 正在睡" + time);
    }

    @Override
    public void eat(String something) {
        System.out.println("Student 正在吃" + something);
    }
}

编写静态代理的类,这个代理类也需要实现被代理类的相同接口,即Person接口


/**
 * @author aRunner
 * @date 2020/5/11
 */
public class ProxyTest implements Person{
    private Person person;

    public ProxyTest(Person person) {
        this.person = person;
    }

    @Override
    public void sleep(String time) {
        System.out.println("proxyTest sleep start!!!!");
        person.sleep(time);
        System.out.println("proxyTest sleep end!!!!");
    }

    @Override
    public void eat(String something) {
        System.out.println("proxyTest eat start!!!!");
        person.eat(something);
        System.out.println("proxyTest eat end!!!!");
    }

    public static void main(String[] args) {
        Student student = new Student();
        ProxyTest proxyTest = new ProxyTest(student);
        proxyTest.sleep("午觉");
        System.out.println("——————————");
        proxyTest.eat("午饭");
    }
}

打印结果:
Java静态代理_第1张图片
这就是静态代理的实现方式,看起来实现还是比较简单的。

你可能感兴趣的:(java)