代理模式:
**当一个对象不合适或者不能够直接引用目标对象是,代理对象就会以中介的方式介入。
例如:你买房子找中介,那么中介就是代理对象。
代理对象分两种,静态代理和动态代理。
**
一、静态代理
//接口 提供了抽象的teach方法
public interface ITeacherDao {
default void show(){
System.out.println("我是老师!");
}
void teach();
}
/**
* @ClassName TeacherDao
* @Description Todo
* 抽象教学方法的实现类
*/
public class TeacherDao implements ITeacherDao {
@Override
public void teach() {
System.out.println("teach" + "我是 TeacherDao!");
}
}
/**
* @ClassName staticproxy
* @Description Todo
*静态代理 : 在代理对象中调用被代理对象的teach方法。
* 调用是要通过setter注入,组合,被代理对象target
*/
public class Staticproxy implements ITeacherDao {
TeacherDao target;
public TeacherDao getTeacherDao() {
return target;
}
public void setTeacherDao(TeacherDao teacherDao) {
this.target = teacherDao;
}
@Override
public void teach() {
System.out.println("开始代理 完成某些操作。。。。。 ");//方法
target.teach();
System.out.println("完成代理 完成某些操作。。。。。 ");//方法
}
}
/**
* @ClassName client
* @Description Todo
* 静态代理:
* 角色:staticproxy 代理对象, TeacherDao 被代理对象, 两个对象都实现 IteacherDao接口
* 代理对象中组合被代理对象,这样才能调用代理对象方法。
* 被代理对象 target
*/
public class client {
public static void main(String[] args) {
//创建目标对象(被代理对象)
TeacherDao teacherDao = new TeacherDao();
//创建代理对象, 同时将被代理对象传递给代理对象
Staticproxy staticproxy = new Staticproxy();
staticproxy.setTeacherDao(teacherDao);
//通过代理对象,调用到被代理对象的方法
//即:执行的是代理对象的方法,代理对象再去调用目标对象的方法
staticproxy.teach();
}
}