zoukankan      html  css  js  c++  java
  • 设计模式讲解3:ChainOfResponsibility模式源码

    声明:迁移自本人CSDN博客https://blog.csdn.net/u013365635

    责任链模式,和普通的函数逐层调用栈形成的逻辑链条不通,责任链会落实到某一个具体实施者完成该责任,而普通函数调用栈则是各个被调用函数环环相扣的。记住这点区别可以对责任链模式记忆清晰。
    举个例子,程序员应该编写有实际价值的代码,程序员知识一个有用的程序产生的过程链条上的一环。从市场人员接订单、架构师设计系统、程序员编码、测试人员测试,这就是一个典型的责任链。
    责任链接口

    package com.designpattern.chainofresponsibility;
    
    public interface Chain  {
        void addChain(Chain c);
        void sendToNextChain(String mesg);
    }
    

    市场人员,负责从市场接订单

    package com.designpattern.chainofresponsibility;
    
    /**
     * 市场人员,获得订到
     */
    public class Marketer implements Chain {
        private Chain nextChain = null;
        private String responsibility = "Get A Order";
    
        public void addChain(Chain c) {
            nextChain = c;
        }
    
        public void sendToNextChain(String msg) {
            if(msg.equals(responsibility)) {
                System.out.println("A Marketer:Get A Order");
            } else {
                if(nextChain != null) {
                    nextChain.sendToNextChain(msg);
                }
            }
        }
    }
    

    架构师,负责设计系统

    package com.designpattern.chainofresponsibility;
    
    /**
     * 架构师,设计系统
     */
    public class Architect implements Chain {
        private Chain nextChain = null;
        private String responsibility = "Design";
    
        public void addChain(Chain c) {
            nextChain = c;
        }
        
        public void sendToNextChain(String msg) {
            if(msg.equals(responsibility)) {
                System.out.println("A Architect: Design");
            } else {
                if(nextChain != null) {
                    nextChain.sendToNextChain(msg);
                }
            }
        }
    }
    

    程序员,负责程序开发

        package com.designpattern.chainofresponsibility;
        
        /**
         * 程序员,编码
         */
        public class Programmer implements Chain {
            private Chain nextChain = null;
            private String responsibility = "Coding";
        
            public void addChain(Chain c) {
                nextChain = c;
            }
        
            public void sendToNextChain(String msg) {
                if(msg.equals(responsibility)) {
                    System.out.println("A Programmer: Coding");
                } else {
                    if(nextChain != null) {
                        nextChain.sendToNextChain(msg);
                    }
                }
            }
        }
    

    测试人员,负责测试开发出的系统

    package com.designpattern.chainofresponsibility;
    /**
     * 测试人员,测试程序及系统
     */
    public class Tester implements Chain {
        private Chain nextChain = null;
        private String responsibility = "Test";
    
        public void addChain(Chain c) {
            nextChain = c;
        }
    
        public void sendToNextChain(String msg) {
            if(msg.equals(responsibility)) {
                System.out.println("A Tester: Test");
            } else {
                if(nextChain != null) {
                    nextChain.sendToNextChain(msg);
                }
            }
        }
    }
    

    其他人,提供各种其他服务

    package com.designpattern.chainofresponsibility;
    
    /**
     * 其他人员,提供其他服务
     */
    public class Others implements Chain {
        private Chain nextChain = null;
        private String responsibility = "";
    
        public void addChain(Chain c) {
            nextChain = c;
        }
    
        public void sendToNextChain(String msg) {
            System.out.println("supply service:" + msg);
        }
    }
    

    程序运行结果如下。

    A Marketer:Get A Order
    A Architect: Design
    A Programmer: Coding
    A Tester: Test
    supply service:Other Service
    
  • 相关阅读:
    B树和B+树的插入、删除图文详解
    使用limit分页查询时,做delete操作,会导致丢失数据
    【转载】研发应该懂的binlog知识(下)
    【转载】研发应该懂的binlog知识(上)
    OOM排除与JVM调优
    Intellij IDEA集成JProfiler性能分析神器
    Java程序内存分析:使用mat工具分析内存占用
    mysql 查询结果为空时值时执行后面的sql语句
    mysql 无数据插入,有数据更新
    C# 超大数据量导入 SqlBulkCopy
  • 原文地址:https://www.cnblogs.com/xsl-thumb-rfcs/p/9941592.html
Copyright © 2011-2022 走看看