八、静态代理

定义:给目标对象提供一个代理对象,并由代理对象控制对目标对象的引用。
代理对象:起到中介作用

好处:新增额外功能不用改变真实对象类,比如真实对象仅仅买了个礼物,现在打算新增包装礼物功能,就可以用静态代理方式,创建代理对象,里面封装真实对象买礼物,额外做包装礼物功能

缺点:

  1. 由于在客户端(使用时)和真实主题之间增加了代理对象,因此会造成请求的处理速度变慢
  2. 1个静态代理只服务1种类型的目标对象,如果目标对象较多情况下,若采用静态代理,则会出现静态代理对象量多,代码量大,从而导致代码复杂问题

操作原理:创建抽象对象接口,即真实对象和代理对象都要实现的接口,然后在代理对象实现和真实对象实现一样的方法中,引用或者创建真实对象,调用真实对象的方法,然后代理对象额外做一些操作。

示例代码:
步骤1、创建抽象对象接口(Subject):声明你(真实对象)需要让代购(代理对象)帮忙做的事(买Mac)

interface Subject {
    void buyGift();
}

步骤2、创建真实对象

class RealSubject implements Subject {
    @Override
    public void buyGift() {
        System.out.println("我要买一份礼物");
    }
}

步骤3、创建代理对象,并通过代理类创建真实对象示例访问其方法,再额外加功能

class ProxySubject implements Subject {
    @Override
    public void buyGift() {
        RealSubject realSubject = new RealSubject();
        realSubject.buyGift();
        //额外操作
        System.out.println("礼物进行包装");
    }
}

步骤4、开始使用

public class StaticProxyDemo {

    public static void main(String[] args){
        Subject subject = new ProxySubject();
        subject.buyGift();
    }

}

参考:https://www.jianshu.com/p/a8aa6851e09e