静态代理模式

Summary::对目标对象的间接访问

静态代理模式是一种常用的设计模式,用于实现对目标对象的间接访问,并在此基础上增加额外的功能。静态代理的主要特点是代理类在程序运行前就已经存在,因此它需要在编译期间就完成代理类的生成。

定义与实现

简言之,代理模式就是设置一个中间代理来控制访问原目标对象,以达到增强原对象的功能和简化访问方式
static.oschina.net/uploads/img/201707/18202945lHIa.png

静态代理要求代理类和目标对象实现相同的接口或继承相同的类。在代理类中,需要显式地调用目标对象的方法,并在方法中添加增强逻辑。例如,如果目标对象是一个服务类,代理类可以在调用服务类的方法前后添加一些额外的逻辑,如日志记录、权限检查等。

实现步骤

  1. 定义一个接口,该接口描述了客户端可以调用的方法。
  2. 创建一个被代理类的实现类,实现上面定义的接口。
  3. 创建一个代理类,该类继承被代理类的实现类或实现被代理类的接口。
  4. 在代理类中重写接口方法,并在方法中调用被代理类的方法。
  5. 使用代理类来代替被代理类的实现类或接口的实现类。

优缺点

优点

  1. 实现简单:静态代理的实现较为简单,只需代理对象对目标对象进行包装即可。
  2. 运行时效率高:由于代理类在编译期间就已经确定,因此运行时效率较高。
  3. 不修改目标对象:可以在不修改目标对象代码的情况下,对其进行扩展。

缺点

  1. 只能为一个目标对象服务:静态代理只能为一个固定接口的目标对象服务,如果目标对象过多,则会产生很多代理类。
  2. 代码重复:如果接口增加了新的方法,除了所有实现类需要更新外,代理类也需要相应地添加这些方法的实现,这会导致大量的代码重复。
  3. 不灵活:静态代理不够灵活,因为一旦接口发生变化,代理类也需要同步更新。