代理模式: 为一个对象提供一个替身,以控制对这个对象的访问。即通过代理对象访问目标对象
好处是:可以在目标对象的基础上,增强额外的功能操作,即扩展目标对象的功能
被代理对象: 可以是远程对象、创建开销大的对象或者需要安全控制的对象
分为:
代理模式示意图:

静态代理在程序运行前就已经存在代理类的字节码文件。在使用时,需要定义接口或者父类,被代理对象(及目标对象)与代理对象一起实现相同的接口或者继承相同的父类
应用实例:
**优点:**在不修改目标对象的功能前提下,能通过代理对象对目标功能扩展
**缺点:**一个目标类会有一个代理类,所以会有很多代理类产生,一旦接口增加方法,目标对象与代理对象都需要维护

//接口
public interface ITeacher {
void teach();
}
// 目标类(被代理类)
public class LiTeacher implements ITeacher{
public void teach(){
System.out.println("正在讲课...");
}
}
// 代理类
public class ProxyTeacher implements ITeacher{
// 通过接口聚合 被代理类
private ITeacher target;
public ProxyTeacher(ITeacher target) {
this.target = target;
}
@Override
public void teach() {
// 额外操作1
System.out.println("代理开始...");
target.teach();
// 额外操作2
System.out.println("代理结束...");
}
}
// 测试类
public class Main {
public static void main(String[] args) {
// 创建目标对象(被代理对象)
LiTeacher liTeacher = new LiTeacher();
// 创建代理对象,同时传入目标对象
ProxyTeacher proxy = new ProxyTeacher(liTeacher);
proxy.teach();
}
}
// 结果显示
------------------------------------------------------
代理开始...
正在讲课...
代理结束...