第二节:代理模式——静态代理

一、静态代理

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

  

二、应用实例

  1、具体要求

    (1)定义一个接口:ITeacherDAO

    (2)目标对象 TeacherDAO 实现接口 ITeacherDAO

    (3)使用静态代理方式,就需要在代理对象 TeacherDAOProxy 中也实现 ITeacherDAO

    (4)调用的时候通过调用代理对象的方法来调用目标对象

    (5)特别提示:代理对象与目标对象要实现相同的接口,然后通过调用相同的方法来调用目标对象的方法;

  2、思路分析与类图

      

  3、代码实现

    接口:

1 /**
2  * 接口
3  */
4 public interface ITeacher {
5 
6     void teach();
7 }

    被代理类:

1 /**
2  * 被代理对象
3  */
4 public class TeacherDao implements ITeacher{
5     @Override
6     public void teach() {
7         System.out.println("老师授课中。。。。");
8     }
9 }

    代理类:

 1 /**
 2  * 代理对象,静态代理
 3  */
 4 public class TeacherDaoProxy implements ITeacher{
 5 
 6     /**
 7      *  目标对象,通过接口来聚合
 8      */
 9     private ITeacher target;
10 
11     /**
12      * 构造器
13      * @param target
14      */
15     public TeacherDaoProxy(ITeacher target) {
16         this.target = target;
17     }
18 
19     @Override
20     public void teach() {
21         System.out.println("开始代理,完成某些操作....");
22         target.teach();
23         System.out.println("提交");
24     }
25 }

    客户端:

 1 public class Client {
 2     public static void main(String[] args) {
 3         //创建目标对象,被代理对象
 4         TeacherDao teacherDao = new TeacherDao();
 5 
 6         //创建代理对象,同时把被代理对象传递给代理对象
 7         TeacherDaoProxy teacherDaoProxy = new TeacherDaoProxy(teacherDao);
 8 
 9         //通过代理对象,调用到被代理对象的方法
10         //即:执行的是代理对象的方法,代理对象再去调用目标对象的方法
11         teacherDaoProxy.teach();
12     }
13 }

三、静态代理小结

  1、优点:在不修改目标对象的功能前提下,能通过代理对象对目标功能扩展;

  2、缺点:因为代理对象需要与目标对象实现一样的接口,所以会有很多代理类;

  3、一旦接口增加方法,目标对象与代理对象都要维护;

原文地址:https://www.cnblogs.com/niujifei/p/14359247.html