Java中的静态代理是代理模式中的一种,通过静态代理可在不修改目标对象的情况下来扩展目标对象的功能。

静态代理需要两种角色,并且这两种角色要实现相同的接口

interface Marry{
    void HappyMarry();
}

一个人要结婚,那么他是结婚的主角,实现结婚则需要婚庆公司来协助,提供结婚前和结婚后的相应事宜。那么这个人就是目标对象,而婚庆公司则是代理对象。

那么目标对象需要结婚,则需要实现Marry接口,那么这个时候目标对象即可进行结婚。

class Person implements Marry{
    @Override
    public void HappyMarry() {
        PRT.prtln("真实角色");
    }
}
public class StaticProxy {
    public static void main(String[] args) {
        Person person = new Person();
        person.HappyMarry();
    }
}

image-20211228155029798
image-20211228155029798

一个人的精力是有限的,于是我们需要婚庆公司的参与来对结婚进行扩充,但是要结婚的目标对象不变,要做的事情也不变,那么代理对象则需要实现相同的接口

class WeddingCommpany implements Marry{

    private Marry target;

    public WeddingCommpany(Marry target) {
        this.target = target;
    }

    @Override
    public void HappyMarry() {
        before();
        target.HappyMarry();
        after();
    }
    private void before(){
        PRT.prtln("静态代理结婚前");
    }
    private void after(){
        PRT.prtln("静态代理结婚后");
    }

这个时候,结婚则不需要目标对象直接执行,而是由代理对象进行代理执行

public class StaticProxy {
    public static void main(String[] args) {
        WeddingCommpany weddingCommpany = new WeddingCommpany(new Person());
        weddingCommpany.HappyMarry();
    }
}

image-20211228155049342
image-20211228155049342

这样,目标对象就可以专注做自己的任务,其余的事情交给静态代理来做。

版权声明
本文作者 珂泽
本文链接 https://www.kezez.com/archives/31.html
共享协议 CC BY-NC-SA 4.0
引用规则 非商业转载及引用请注明出处(作者、原文链接),商业转载请联系作者获得授权。
QQ 群组 962303102