• 职责链设计模式最简单的实例


      啥是职责链设计模式、类图长啥样、有哪些应用场景等等这些网上一捞一大把,就不再费口水了。一图抵千言,一个例子抵一百个类图。不废话,上例子:

      1、职责接口:

    package com.wlf.chain;
    
    import com.wlf.entity.CommonRequest;
    import com.wlf.entity.CommonResponse;
    
    /**
     * 职责类
     */
    public interface Responsibility {
        void execute(CommonRequest request, CommonResponse response, ResponsibilityChain chain);
    }

      2、两个实现类:

    package com.wlf.chain.concrete;
    
    import com.wlf.chain.Responsibility;
    import com.wlf.chain.ResponsibilityChain;
    import com.wlf.entity.CommonRequest;
    import com.wlf.entity.CommonResponse;
    
    /**
     * 转写职责类
     */
    public class TransferResponsibility implements Responsibility {
        @Override
        public void execute(CommonRequest request, CommonResponse response, ResponsibilityChain chain) {
            System.out.println("开始转写前处理一下...");
            chain.doExecute(request,response);
            System.out.println("结束转写前再搞一下...");
        }
    }
    package com.wlf.chain.concrete;
    
    import com.wlf.chain.Responsibility;
    import com.wlf.chain.ResponsibilityChain;
    import com.wlf.entity.CommonRequest;
    import com.wlf.entity.CommonResponse;
    
    /**
     * 翻译职责类
     */
    public class TranslateResponsibility implements Responsibility {
        @Override
        public void execute(CommonRequest request, CommonResponse response, ResponsibilityChain chain) {
            System.out.println("开始翻译前处理一下...");
            chain.doExecute(request,response);
            System.out.println("结束翻译前再搞一下...");
        }
    }

      3、职责链类:

    package com.wlf.chain;
    
    import com.wlf.chain.concrete.TransferResponsibility;
    import com.wlf.chain.concrete.TranslateResponsibility;
    import com.wlf.entity.CommonRequest;
    import com.wlf.entity.CommonResponse;
    
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * 职责链
     */
    public class ResponsibilityChain {
    
        // 职责链当前位置,从0开始
        private int position = 0;
    
        private List<Responsibility> responsibilities = new ArrayList<>();
    
        ResponsibilityChain addResponsibility(Responsibility responsibility) {
            responsibilities.add(responsibility);
            return this;
        }
    
        public void doExecute(CommonRequest request, CommonResponse response) {
    
            // 递归执行职责链,把所有职责都执行完递归就结束了
            if (position < responsibilities.size()) {
                Responsibility responsibility = responsibilities.get(position++);
                responsibility.execute(request, response, this);
                return;
            }
    
            // 职责链结束后执行业务逻辑
            System.out.println("do business...");
        }
    
        public static void main(String[] args) {
            ResponsibilityChain chain = new ResponsibilityChain();
            chain.addResponsibility(new TransferResponsibility());
            chain.addResponsibility(new TranslateResponsibility());
            chain.doExecute(new CommonRequest(), new CommonResponse());
        }
    }

      运行日志:

    com.wlf.chain.ResponsibilityChain
    开始转写前处理一下...
    开始翻译前处理一下...
    do business...
    结束翻译前再搞一下...
    结束转写前再搞一下...
    
    Process finished with exit code 0
  • 相关阅读:
    UML建模图
    Ubuntu选择软件源
    用于主题检测的临时日志(c5ac07a5-5dab-45d9-8dc2-a3b27be6e507
    【Android】不弹root请求框检测手机是否root
    android开机动画(bootanimation)
    UniversalImageLoader(异步加载大量图片)
    PHP字符串
    Android获取本机号码及运营商
    静态代码块、构造代码块、构造方法
    Android来电拦截及来电转移
  • 原文地址:https://www.cnblogs.com/wuxun1997/p/13186670.html
Copyright © 2020-2023  润新知