美文网首页
代理模式

代理模式

作者: 东南枝下 | 来源:发表于2021-09-26 20:42 被阅读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 典型的动态代理

    相关文章

      网友评论

          本文标题:代理模式

          本文链接:https://www.haomeiwen.com/subject/bfrcnltx.html