责任链模式 - Chain of Responsibility Pattern

xiaoxiao2021-02-28  69

模式简介UML图GITHUB源码下载示例代码运行结果

模式简介

Avoid coupling the sender of a request to its receiver by giving more than one object a chance to handle the request. Chain the receiving objects and pass the request along the chain until an object handles it.

UML图

GITHUB源码下载

https://github.com/YEN-GitHub/PatternDemo/tree/master/src/BehavioralPattern1/ChainofResponsibilityPattern 可以start一下,之后最新的都能及时看到.

示例代码

package BehavioralPattern1.ChainofResponsibilityPattern.demo1; /** * Created by yangenneng on 2017-06-07 10:30 * Abstract:抽象处理者类 */ public abstract class Handler { private String name; //姓名 private Handler successor = null;//下一步操作者 public void handleRequest(double objectPrice, String objectName) { } public String getName() { return name; } public void setName(String name) { this.name = name; } public Handler getSuccessor() { return successor; } public void setSuccessor(Handler successor) { this.successor = successor; } } package BehavioralPattern1.ChainofResponsibilityPattern.demo1; /** * Created by yangenneng on 2017-06-07 10:34 * Abstract:部门经理 */ public class DepartmentManager extends Handler { public DepartmentManager(String name){ this.setName(name); } @Override public void handleRequest(double objectPrice, String objectName) { if(objectPrice>10000){ this.getSuccessor().handleRequest(objectPrice, objectName); }else { System.out.println("部门经理:"+this.getName()+"处理申请,购买:"+objectName); } } } package BehavioralPattern1.ChainofResponsibilityPattern.demo1; /** * Created by yangenneng on 2017-06-07 10:39 * Abstract:部门领导 */ public class DepartmentLeader extends Handler { public DepartmentLeader(String name){ this.setName(name); } @Override public void handleRequest(double objectPrice, String objectName) { if(objectPrice>20000){ this.getSuccessor().handleRequest(objectPrice, objectName); }else { System.out.println("部门领导:"+this.getName()+"处理申请,购买:"+objectName); } } } package BehavioralPattern1.ChainofResponsibilityPattern.demo1; /** * Created by yangenneng on 2017-06-07 10:41 * Abstract:总公司经理 */ public class CompanyManager extends Handler { public CompanyManager(String name){ this.setName(name); } @Override public void handleRequest(double objectPrice, String objectName) { if(objectPrice>30000){ this.getSuccessor().handleRequest(objectPrice, objectName); }else { System.out.println("总公司经理:"+this.getName()+"处理申请,购买:"+objectName); } } } package BehavioralPattern1.ChainofResponsibilityPattern.demo1; /** * Created by yangenneng on 2017-06-07 10:41 * Abstract:总公司领导 */ public class CompanyLeader extends Handler { public CompanyLeader(String name){ this.setName(name); } @Override public void handleRequest(double objectPrice, String objectName) { if(objectPrice>40000){ this.getSuccessor().handleRequest(objectPrice, objectName); }else { System.out.println("总公司领导:"+this.getName()+"处理申请,购买:"+objectName); } } } package BehavioralPattern1.ChainofResponsibilityPattern.demo1; /** * Created by yangenneng on 2017-06-07 10:47 * Abstract:客户端测试 */ public class Client { public static void main(String[] args) { //新建员工 DepartmentManager zhangsan = new DepartmentManager("张三"); DepartmentLeader lisi = new DepartmentLeader("李四"); CompanyManager wangwu = new CompanyManager("王五"); CompanyLeader zhaoliu = new CompanyLeader("赵六"); //设置下一步审批者 zhangsan.setSuccessor(lisi); lisi.setSuccessor(wangwu); wangwu.setSuccessor(zhaoliu); //审批流程执行 zhangsan.handleRequest(8000,"材料1"); zhangsan.handleRequest(18000,"材料2"); zhangsan.handleRequest(28000,"材料3"); zhangsan.handleRequest(38000,"材料4"); } }

运行结果

转载请注明原文地址: https://www.6miu.com/read-37946.html

最新回复(0)