基本介绍
实现思路
代码如下
Client
package staticproxy;
public class Client {
public static void main(String[] args) {
TeacherDaoProxy teacherDaoProxy = new TeacherDaoProxy(new TeacherDao());
teacherDaoProxy.teacher();
}
}
ITeacherDao
package staticproxy;
public interface ITeacherDao {
void teacher();
}
TeacherDao
package staticproxy;
public class TeacherDao implements ITeacherDao {
@Override
public void teacher() {
System.out.println("老师讲课了");
}
}
TeacherDaoProxy
package staticproxy;
public class TeacherDaoProxy implements ITeacherDao {
private ITeacherDao iTeacherDao;
public TeacherDaoProxy(ITeacherDao iTeacherDao) {
this.iTeacherDao = iTeacherDao;
}
@Override
public void teacher() {
System.out.println("开始代理。。。。。");
iTeacherDao.teacher();
System.out.println("代理结束。。。。。");
}
}
优点:这样写可以在不修改被代理对象的前提上,在调用TeacherDao的前后做一些事情,达到了功能增强的目的。据网友交代spring的AOP就是用的代理模式的原理。
缺点:因为代理类和被代理类都需要实现同一个接口,会造成很多的代理类。如果增加接口的方法,代理和被代理类都需要维护。