代理模式

代理模式顾名思义就是存在一个“代理者”去代替真正的对象去执行相应的操作,并且可以在操作前后进行增强操作。现实生活中,明星往往都会有一个经纪人,所有的行程安排都由经纪人处理。下面我们通过代码来描述这种场景。
代理模式中主要存在三种角色:

  • Subject:抽象对象,声明真实对象和代理对象的公共接口
  • RealSubject:真实对象,是最终被调用的对象,即上文提到的明星
  • Proxy:代理对象,会对外暴露,内部有真实对象的引用,即上文提到的经纪人

首先,我们先声明一下抽象对象,模拟明星参加活动的场景,会有一个参加活动的抽象方法。

public interface ISubject {
    void participateActivity();
}

模拟明星参加活动的代码:

public class RealSubject implements ISubject {
    @Override
    public void participateActivity() {
        System.out.println("明星本人参加活动");
    }
}

模拟经纪人的代理代码:

public class ProxySubject implements ISubject {

    RealSubject star = new RealSubject();

    @Override
    public void participateActivity() {
        System.out.println("经纪人收到了活动邀请,通知明星本人");
        // 此处调用真实对象去执行对应的方法;在之前可以去进行方法的增强
        star.participateActivity();
    }
}

最终客户端,只需要访问代理对象即可。

public class Client {
    public static void main(String[] args) {
        ProxySubject proxySubject = new ProxySubject();
        proxySubject.participateActivity();
    }
}

使用场景

此时我们例子比较简单,下面说一下代理模式的一些场景。以下两种场景会比较试用于代理模式:

  1. 直接访问对象复杂。比如上游需要访问多次才能获取到想要的内容,此时就可以提供一个代理对象给上游,上游只需访问一次即可。虽然不能省去代理对象的复杂度,但是省去了上游调用的复杂度。
  2. 需要对访问的内容进行增强。例如上文中,我们在调用真实对象之前,可以做一些方法增强。在Spring中的AOP就是采用的代理模式的思想。

    优缺点

优点

  1. 职责分明,高扩展性
  2. 可以对方法进行增强处理

缺点:

  1. 由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务