代理模式

2021-09-26  本文已影响0人  东南枝下

代理模式

三个角色

图片.png

抽象主题(Subject)角色

真实主题和代理主题的共同接口,以便在任何可以使用真实主题的地方都可以使用代理主题

/**
 * @author Jenson
 */
public interface Subject {

    /**
     * 定义一个请求方法
     */
    public void request();
}

代理主题(Proxy Subject)角色

该角色负责控制对真实主题的引用,负责在需要的时候创建或删除真实主题对象,并且在真实主题角色处理完毕前后做预处理和善后处理工作

/**
 * @author Jenson
 */
@Data
public class ProxySubject implements Subject {

    private Subject subject;

    public <T extends Subject> ProxySubject(Class<T> c) throws IllegalAccessException, InstantiationException {
        this.subject = c.newInstance();
    }

    public void request() {
        this.doSomethingBeforeRequest();
        subject.request();
        this.doSomethingAfterRequest();
    }

    private void doSomethingBeforeRequest(){
        System.out.println("Do Something Before Request...");
    }
    private void doSomethingAfterRequest(){
        System.out.println("Do Something After Request...");
    }
}

真实主题(Real Subject)角色

业务逻辑的具体执行者

/**
 * @author Jenson
 */
@Data
public class RealSubject implements Subject {
    public void request() {
        System.out.println("一条只需要关注自身业务的逻辑");
    }
}


调用

/**
 * @author Jenson
 */
public class ProxyMain {
    public static void main(String[] args) throws InstantiationException, IllegalAccessException {
        Subject subject = new ProxySubject(RealSubject.class);
        subject.request();
    }
}

代理模式的优点

SpringAOP 典型的动态代理

上一篇 下一篇

猜你喜欢

热点阅读