Java责任链模式

2023-12-13 21:19:39

定义

请求与接受者解耦。举例:出门约会这个请求,需要做,洗头发,换衣服,换鞋三个步骤。

洗头发
换衣服
换鞋

耦合三个步骤到顺序中,如果扩展需要喷香水,则需要改变主流程代码。

使用责任链模式。
通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。
洗头发 next持有换衣服 换衣服 持有 换鞋

业务代码
Filter.洗头发。

实现

主程序

public static void main(String[] args) {
        Dating dating = new Dating();

        Hair hair = new Hair();
        Clothing clothing = new Clothing();
        Clothing clothing1 = new Clothing();
        hair.build(Arrays.asList(clothing, clothing1));

        hair.handle(dating);
    }

事件

public static class Dating {
        private boolean hair = true;
        private boolean clothing = true;

        public boolean isHair() {
            return hair;
        }

        public boolean isClothing() {
            return clothing;
        }
    }

基类

public static abstract class AbstractDateChain {
        protected AbstractDateChain nextStep;

        public void handle(Dating dating) {
            handDating(dating);
            if(nextStep != null) {
                nextStep.handle(dating);
            }
        }
        /**
         * 处理请求
         * @param dating
         */
        abstract void handDating(Dating dating);

        public void setNextStep(AbstractDateChain abstractDateChain) {
            this.nextStep = abstractDateChain;
        }

        public void build(List<AbstractDateChain> abstractDateChains) {
            this.nextStep = abstractDateChains.get(0);
            for (int i = 0; i < abstractDateChains.size()-1; i++) {
                abstractDateChains.get(i).setNextStep(abstractDateChains.get(i+1));
            }
        }
    }

实现类

public static class Hair extends AbstractDateChain {

        @Override
        void handDating(Dating dating) {
            if(dating.isHair()) {
                System.out.println("I Washing Hair");
            }
        }
    }

    public static class Clothing extends AbstractDateChain {

        @Override
        void handDating(Dating dating) {
            if(dating.isClothing()) {
                System.out.println("I Were Shinning Clothing!");
            }
        }
    }

文章来源:https://blog.csdn.net/qq_23301703/article/details/134909923
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。