一、静态代理
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、一旦接口增加方法,目标对象与代理对象都要维护;