代理模式

为一个对象提供一个替身,以控制对这个对象的访问。即:通过代理对象访问目标对象,
这样做的好处是:可以在目标对象的基础上,增强额外的功能操作,即扩展目标对象功能;

分类:
静态代理,动态代理 Cglib代理

静态代理

静态代理在使用时,需要定义接口或者父类,被代理对象(即目标对象)与代理对象一
起实现相同的接口或者是继承相同父类

应用实例

具体要求
1) 定义一个接口:ITeacherDao
2) 目标对象TeacherDAO实现接口ITeacherDAO
3) 使用静态代理方式,就需要在代理对象TeacherDAOProxy中也实现ITeacherDAO
4) 调用的时候通过调用代理对象的方法来调用目标对象.
5) 特别提醒:代理对象与目标对象要实现相同的接口,然后通过调用相同的方法来
调用目标对象的方法。

image.png

  1. //接口
  2. public interface ITeacherDao {
  3. void teach(); // 授课的方法
  4. }
  5. public class TeacherDao implements ITeacherDao {
  6. @Override
  7. public void teach() {
  8. // TODO Auto-generated method stub
  9. System.out.println(" 老师授课中 。。。。。");
  10. }
  11. }
  12. //代理对象,静态代理
  13. public class TeacherDaoProxy implements ITeacherDao{
  14. private ITeacherDao target; // 目标对象,通过接口来聚合
  15. //构造器
  16. public TeacherDaoProxy(ITeacherDao target) {
  17. this.target = target;
  18. }
  19. @Override
  20. public void teach() {
  21. // TODO Auto-generated method stub
  22. System.out.println("开始代理 完成某些操作。。。。。 ");//方法
  23. target.teach();
  24. System.out.println("提交。。。。。");//方法
  25. }
  26. }