设计模式讲解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
原文地址:https://www.cnblogs.com/xsl-thumb-rfcs/p/9941592.html