应怜屐齿印苍苔,小扣柴扉久不开
序
为遵守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("午饭");
}
}
打印结果:
这就是静态代理的实现方式,看起来实现还是比较简单的。