• 责任链模式


    概念

    责任链模式是为一个请求创建一条处理者调用链,在该链中,处理者保存下一个处理者的引用。当一个处理者不能执行该请求的时候,它会把请求交给下一个下一个处理者,如此类推。

    优点

    • 请求和处理两个处理相互解耦。
    • 可以动态的添加处理者。

    缺点

    • 请求到链表最后,都没有处理者能处理。
    • 可能导致循环引用。

    UML图

    Handler(抽象处理者):定义一个处理请求的接口

    ActuallyHandlerN(实际处理者):实现处理请求的接口。

    部分代码部分:

    Handler:

    public abstract class Handler {
    
        protected Handler nextHandler; // 下一个责任链成员
    
        public Handler getNextHandler() {
            return nextHandler;
        }
    
        public void setNextHandler(Handler nextHandler) {
            this.nextHandler = nextHandler;
        }
    
        // 处理传递过来的时间
        public abstract void HandleRequest(int type);
    }
    

    ActuallyHandlerN:

    public class ActuallyHandler1 extends Handler {
    
        @Override
        public void HandleRequest(int type) {
            if (type == 1) {
                System.out.println("ActuallyHandler1解决了问题!");
            } else {
                System.out.println("ActuallyHandler1解决不了问题......");
                if (nextHandler != null) {
                    nextHandler.handleMessage(type);
                } else {
                    System.out.println("没有人能处理这个消息");
                }
            }
        }
    }
    
    public class ActuallyHandler2 extends Handler {
    
        @Override
        public void HandleRequest(int type) {
            if (type == 2) {
                System.out.println("ActuallyHandler2解决了问题!");
            } else {
                System.out.println("ActuallyHandler2解决不了问题......");
                if (nextHandler != null) {
                    nextHandler.handleMessage(type);
                } else {
                    System.out.println("没有人能处理这个消息");
                }
            }
        }
    }
    
    public class ActuallyHandler3 extends Handler {
    
        @Override
        public void HandleRequest(int type) {
            if (type == 3) {
                System.out.println("ActuallyHandler3解决了问题!");
            } else {
                System.out.println("ActuallyHandler3解决不了问题......");
                if (nextHandler != null) {
                    nextHandler.handleMessage(type);
                } else {
                    System.out.println("没有人能处理这个消息");
                }
            }
        }
    }
    
  • 相关阅读:
    C# 在 8.0 对比 string 和 string? 的类型
    C# 在 8.0 对比 string 和 string? 的类型
    C# 使用反射获取私有属性的方法
    C# 使用反射获取私有属性的方法
    win10 uwp 发布旁加载自动更新
    win10 uwp 发布旁加载自动更新
    安装 Sureface Hub 系统 Windows 10 team PPIPro 系统
    安装 Sureface Hub 系统 Windows 10 team PPIPro 系统
    PHP FILTER_SANITIZE_EMAIL 过滤器
    PHP FILTER_SANITIZE_SPECIAL_CHARS 过滤器
  • 原文地址:https://www.cnblogs.com/zitai/p/13813330.html
Copyright © 2020-2023  润新知