zoukankan      html  css  js  c++  java
  • 设计模式之 责任链模式

    一、定义

    当你想让一个以上的对象有机会能够处理某个请求的时候,就使用责任链模式。

    二、分析

    我们在实际开发过程中,往往会遇到在执行某些操作时需要进行很多条件的验证。

    比如说在用户在订购一个商品时,我们就需要进行用户认证、库存校验、账户校验等等操作,只有经过这些处理后才能正常执行操作。

    如果我们在订购的代码里加上这些校验,就会变成下面的这样:

    代码变得越来越多, 也越来越混乱。

    如果我们后续,需要添加更多的校验或者取消某些校验,这样会导致代码变得越来越多, 也越来越混乱。

    当出现此类的逻辑,设计模式建议我们使用责任链模式。把处理逻辑连成一个链,链上的每个节点都可以跳转到下一个节点上。当需要处理的对象经过每个节点时,节点只需处理自己的逻辑,处理完成后调用下一个节点,直到走完所有的节点。

    处理者依次排列, 组成一条链。

    三、模式类图

    责任链模式

    四、优缺点

    1. 将请求者和接收者解耦;
    2. 简化类结构,类不需要知道全部细节;
    3. 可以更改处理的顺序,动态的添加和删除校验逻辑;
    4. 并不能保证请求被处理;
    5. 请求链过长会导致性能降低;
    6. 不易于观察运行时特征,有碍于除错,我能可能找不到是哪一个类处理了它。

    五、实例

    在员工请假流程中,公司规定:

    请假天数3天内,部门经理审批即可,

    请假天数大于3天的需要再通过老板审批后才能请假。

    根据实例说明,我们可以定义部门经理的处理类和老板处理类,当请假天数3天内,部门经理就进行审核;

    审核完成后流向老板处理类,老板处理类判断,发现天数在3天以内就继续往下放行,大于3天就进行审核。

    源码:gitee地址(点击跳转)

    原创内容,如果你觉得文章还可以的话,不妨点个赞支持一下!转载请注明出处。
  • 相关阅读:
    POJ 3259 Wormholes【BellmanFord】
    POJ 2960 SNim【SG函数的应用】
    ZOJ 3578 Matrixdp水题
    HDU 2897 邂逅明下【bash博弈】
    BellmanFord 算法及其优化【转】
    【转】几个Java的网络爬虫
    thinkphp 反字符 去标签 自动加点 去换行 截取字符串 冰糖
    php 二维数组转 json文本 (jquery datagrid 数据格式) 冰糖
    PHP 汉字转拼音(首拼音,所有拼音) 冰糖
    设为首页与加入收藏 兼容firefox 冰糖
  • 原文地址:https://www.cnblogs.com/lixingwu/p/14979490.html
Copyright © 2011-2022 走看看