首页 > 其他分享 >14) chain of responsibility pattern

14) chain of responsibility pattern

时间:2023-06-09 13:44:52浏览次数:32  
标签:Pipeline 14 level pattern responsibility msg new message public

类别:

 behavioral pattern

问题:

 高耦合,不灵活

if(){

}else if(){

}else if(){

}
...

 

方案:

 

 

 

 

示例:

 

public class ChainOfResponsibilityPattern {

    public static void main(String[] args) {
        // 灵活装配
        Pipeline node1 = new Node1(1);
        Pipeline node2 = new Node2(2);
        Pipeline node3 = new Node3(3);
        node1.setNextNode(node2);
        node2.setNextNode(node3);

        // 固定用法
        node1.load(new Message(2, "need be handled by node2"));
        node1.load(new Message(1, "need be handled by node1"));
        node1.load(new Message(3, "need be handled by node3"));
    }

}

abstract class Pipeline {
    protected int level;
    // next element in chain or responsibility
    protected Pipeline nextNode;

    public void setNextNode(Pipeline nextNode) {
        if (nextNode == null) {
            throw new IllegalArgumentException("");
        }
        this.nextNode = nextNode;
    }

    public void load(Message msg) {
        if (msg == null) {
            throw new IllegalArgumentException("message not be null");
        }
        if (this.level == msg.getLevel()) {
            process(msg.getMsg());
        } else if (this.nextNode != null) {
            nextNode.load(msg);
        } else {
            // the last node can not handle the message
            throw new IllegalStateException("can not handle the message");
        }
    }

    abstract protected void process(String message);
}

class Node1 extends Pipeline {
    public Node1(int level) {
        this.level = level;
    }

    @Override
    protected void process(String message) {
        System.out.println("done by node1: " + message);
    }
}

class Node2 extends Pipeline {
    public Node2(int level) {
        this.level = level;
    }

    @Override
    protected void process(String message) {
        System.out.println("done by node2: " + message);
    }
}

class Node3 extends Pipeline {
    public Node3(int level) {
        this.level = level;
    }

    @Override
    protected void process(String message) {
        System.out.println("done by node3: " + message);
    }
}

class Message {
    private int level;
    private String msg;

    public Message(int level, String msg) {
        this.level = level;
        this.msg = msg;
    }

    public int getLevel() {
        return level;
    }

    public String getMsg() {
        return msg;
    }
}

 

done by node2: need be handled by node2
done by node1: need be handled by node1
done by node3: need be handled by node3

 

应用:

 

不足:(

 

优化:)

 

标签:Pipeline,14,level,pattern,responsibility,msg,new,message,public
From: https://www.cnblogs.com/zno2/p/6694844.html

相关文章

  • 13) Proxy Pattern
    类别: StructuralPattern问题:操纵一个对象时碍手碍脚,与装饰者模式不同之处:装饰者是接口方法,授权小代理则是整个类,授权大方案:   示例: publicclassProxyPatternDemo{publicstaticvoidmain(finalString[]arguments){finalImageimage......
  • 12) Flyweight Pattern
    类别: StructuralPattern问题/动机: 假若绿色是相同部分,占用1M内存,如果提取出来,众对象共享其内容,只占1M内存,否则占10M,且随着对象增多,占用越来越多内存,无疑是浪费资源Aflyweightisanobjectthatminimizesmemoryusagebysharingasmuchdataaspossiblewithot......
  • 11) Facade Pattern
    类别: StructuralPattern问题/动机:系统非常复杂隐藏复杂细节,提供简单界面方案:  示例: /*Complexparts*/publicclassFacadePatternDemo{publicstaticvoidmain(String[]args){CarFacadefacade=newCarFacade();facade.CreateC......
  • 禅道软件14年原创研发荣膺SAFe平台合作伙伴,国际权威机构认可专业实力
    禅道软件(青岛)有限公司与ScaledAgileInc.达成深度合作,禅道软件荣膺SAFe平台合作伙伴。作为一家具有14年原创研发经验的项目管理软件公司,禅道软件在项目管理和敏捷方法方面拥有丰富的实践经验和行业口碑。此次与ScaledAgileInc.的合作,不仅为用户提供更优秀的敏捷项目管理解决方......
  • 侯捷C++(C++标准11-14)
    第一讲语言 C++2.0新的标准库#include<iostream>usingnamespacestd;intmain(){cout<<__cplusplus<<endl;return0;}ViewCode确认支持C++11第二讲标准库......
  • 14dayPythonTask7-类与对象+魔法函数
    目录类与对象1.对象=属性+方法2.self是什么?3.Python的魔法方法4.公有和私有5.继承6.组合7.类、类对象和实例对象8.什么是绑定?9.一些相关的内置函数(BIF)练习题魔法方法1.基本的魔法方法2.算术运算符3.反算术运算符4.增量赋值运算符5.一元运算符6.属性访问7.描......
  • Codeforces 1514 C
    1514C题意给出一个数n,求[1,2,3...n-1]的某个最长子序列,这个子序列的元素乘积模n余1。思路这是个思维题,一个数学公式\[x\equiv1(modn)\rightarrowkx\equivk(mod kn)\]所以子序列中的元素与\(n\)互质,累乘结果模\(n\)后如果不是1,那么将序列中等于结果的元素去......
  • 冲刺国赛模拟 14
    寄。摆。润。寄首先套路拆边贡献。那么设\(dp_{x,i}\)为在\(x\)节点有\(i\)个没匹配的最小代价。转移有三种:往上传:树形背包。在\(x\)放一个:直接清零。放子树里:这个不太好考虑。我们这样的话还需要加信息。设\(g_{x,i}\)为\(x\)子树最近的中转点为\(i\)的最......
  • P2714 循环不变式的基础应用
    你听说过循环不变式吗?不妨来品鉴一下吧:WeLikeStudying大佬的博客:循环不变式而这篇文章,只是对大佬博客的小小注解,外加一点实际应用。我们可以把循环不变式理解成一组条件。在每次循环中,我们保证这组条件均为真。而最后循环就可以得出我们想要的结果。如果思考本质,这实际上......
  • macOS 14 Sonoma(苹果最新系统)测试版
    macOS14Sonoma下载2023苹果全球开发者大会上,苹果宣布macOS下版本定名为Sonoma。此次升级,让Mac体验更加出色。比如提供了全新升级的小组件功能、独有的Mac游戏功能、远程演讲模式以及针对Safari浏览器新增了多种新功能。 macOS14系统新增小组件功能在此之前,Mac的......