设计模式讲解3:ChainOfResponsibility模式源码

本文深入讲解了责任链模式,通过对比普通函数调用栈,强调其特性为将任务明确分配给特定处理者。以软件开发流程为例,展示了市场人员接订单、架构师设计系统、程序员编码、测试人员测试这一典型的责任链实现。

声明:迁移自本人优快云博客https://blog.youkuaiyun.com/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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值