代理模式(初步)

定义

访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介

主要优点:

  • 在客服端与目标对象之间起到一个中介作用和保护目标对象的作用;

  • 代理对象可以扩展目标对象的功能

  • 代理模式能将客户端和目标表对象分离,在一定程度上降低了系统的耦合度,增加了程序的可扩展性

主要缺点:

  • 造成系统设计中类的数量增加

  • 代理对象的增加,会造成处理速度变慢

  • 增加了系统的复杂性

那么如何解决以上提到的缺点呢?答案是可以使用动态代理方式

代理模式的结构与实现

  1. 模式的结构

    代理模式的主要角色如下。

    1. 抽象主题(Subject)类:通过接口或抽象类声明真实主题和代理对象实现的业务方法。

    2. 真实主题(Real Subject)类:实现了抽象主题中的具体业务,是代理对象所代表的真实对象,是最终要引用的对象。

    3. 代理(Proxy)类:提供了与真实主题相同的接口,其内部含有对真实主题的引用,它可以访问、控制或扩展真实主题的功能。

  2. 模式实现

public class ProxyTest{
    public static void main(String[] args) {
       Proxy proxy = new Proxy();
       proxy.Request();
  }
}
//抽象主题 通过接口声明
interface Subject{
   void Request();// 真实主题和代理对象实现的业务方法
}
//真实主题 实现接口中的具体业务
class RealSubject class RealSubject {
   public void Request(){
       System.out.println("访问真实主题方法...");
  }
}
//代理实现
class Proxy implements Subject {
   private RealSubject realSubject;//定义一个真实主题的对象
   public void Request() {
       if (realSubject == null) {
           realSubject = new RealSubject();
      }
       preRequest();
       realSubject.Request();
       postRequest();
  }
   public void preRequest() {
       System.out.println("访问真实主题之前的预处理。");
  }
   public void postRequest() {
       System.out.println("访问真实主题之后的后续处理。");
  }
}

运行结果:

访问真实主题之前的预处理。

访问真实主题方法...

访问真实主题之后的后续处理。

posted @ 2021-03-09 23:08  扣扣M  阅读(67)  评论(0)    收藏  举报