一、什么是代理模式
代理模式:为一个对象提供一个替身,以控制对这个对象的访问。即通过代理
对象访问目标对象.
优点:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。
被代理的对象可以是远程对象、创建开销大的对象或需要安全控制的对象
代理模式有不同的形式,主要有三种静态代理、动态代理和Cglib代理。
二、静态代理
静态代理在使用时,需要定义接口或者父类,被代理对象(即目标对象)与代理对象一起实现相同的接口或者是继承相同父类
特别提醒
:代理对象与目标对象要实现相同的接口,然后通过调用相同的方法来调用目标对象的方法。
具体实例:
1)定义一个接口:lTeacherDao
2)目标对象TeacherDAO实现接口ITeacherDAO
3)使用静态代理方式,就需要在代理对象TeacherDAOProxy中也实现ITeacherDAO
4)调用的时候通过调用代理对象的方法来调用目标对象.
1、定义一个接口:lTeacherDao
package Proxy;
//接口
public interface lTeacherDao {
void teach();//授课方法
}
2、创建目标类,实现接口
package Proxy;
public class TeacherDao implements lTeacherDao{
@Override
public void teach() {
System.out.println("老师授课中");
}
}
3、创建代理类,代理目标类
package Proxy;
//代理对象
public class TeacherDAOProxy implements lTeacherDao{
private TeacherDao target;//目标对象,通过接口聚合
//构造器
public TeacherDAOProxy(TeacherDao target) {
this.target = target;
}
@Override
public void teach() {
System.out.println("代理开始,执行某些操作");
target.teach();
System.out.println("提交");
}
}
4、创建代理对象和目标对象,实现代理
package Proxy;
public class Client {
public static void main(String[] args) {
//初始化被代理对象(目标对象)
TeacherDao teacherDao =