【Java设计模式】· 职责链模式(Chain of Responsibility)

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

职责链模式:


1.觉得学过的东西如果不记下来就太浪费了,还会经常忘掉,于是乎开始写博客。我只是一个菜鸟程序员,但有一颗向往技术大牛的心。


2.职责链模式:当一个问题需要经过“重重考虑”才能给出结果时,这样的“重重考虑”的过程,需要用到职责链模式。职责链模式中,有多个负责不同职责的handler,当handlerA解决不了问题时,会交给handlerB,而如果handlerB也不能解决时,就会交给handlerC····以此类推,直到最后一个handler。


Handler : 责任人的父类

ConcreteHandler:责任人的具体类


3.例子: 学生要向学校请假,如果请假天数<3天,只需要老师批准,而3天<请假天数<7天则需要级长批准,7天以上的请假需要校长批准,这时候需要用到职责链模式。


首先新建一个Handler类,所有处理问题的人都是Handler的子类

package pers.reus.model.handler.impl;

public abstract class Handler {
	//创建职责链的连接者
	protected Handler successor = null;
	
	//设置下一个处理的对象
	public void setSuccessor(Handler successor){
		this.successor = successor;
	}
	
	//获得下一个处理对象
	public Handler getSuccessor(){
		return successor;
	}
	
	/**
	 * 处理学生请假的方法
	 * student 学生姓名
	 * day     请假天数
	 * **/
	public abstract String HandlerRequest(String student, int day);
}


接下来分别创建 教师,级长,校长 三种责任人,他们都继承Handler


教师:

package pers.reus.model.handler;

import pers.reus.model.handler.impl.Handler;

public class Teacher extends Handler {
	public String HandlerRequest(String student, int day){
		//处理请假结果以String返回
		String msg = null;
		
		//请假少于3天,只需老师同意
		if(day <= 3){
			msg = "老师同意 " + student + " 请假 " + day + " 天";
		}else{
			//当存在下一个处理对象时,老师处理不了的请假交由下一个对象处理
			if(getSuccessor() != null){  
				System.out.println("老师无权同意 " + student + " 请假 " + day + " 天");
				return getSuccessor().HandlerRequest(student,day);
			}
		}
		//返回请假结果
		return msg;
	}
	
}


级长:
package pers.reus.model.handler;

import pers.reus.model.handler.impl.Handler;

public class Prefect extends Handler{

	public String HandlerRequest(String student, int day) {
		//处理请假结果以String返回
		String msg = null;
		
		//请假少于7天,只需级长同意
		if(day <= 7){
			msg = "级长同意 " + student + " 请假 " + day + " 天";
		}else{
			//当存在下一个处理对象时,级长处理不了的请假交由下一个对象处理
			if(getSuccessor() != null){
				System.out.println("级长无权同意 " + student + " 请假 " + day + " 天");
				return getSuccessor().HandlerRequest(student,day);
			}
		}
		//返回请假结果
		return msg;
	}

}


校长:

package pers.reus.model.handler;

import pers.reus.model.handler.impl.Handler;

public class SchoolMaster extends Handler{

	public String HandlerRequest(String student, int day) {
		//处理请假结果以String返回
		String msg = null;
		
		//请假大于7天,需要校长同意
		if(day > 7){
			msg = "校长同意 " + student + " 请假 " + day + " 天";
		}else{
			//当存在下一个处理对象时,校长处理不了的请假交由下一个对象处理
			if(getSuccessor() != null){
				System.out.println("校长无权同意 " + student + " 请假 " + day + " 天");
				return getSuccessor().HandlerRequest(student,day);
			}
		}
		//返回请假结果
		return msg;
	}
	
}


最后,创建client类测试:

package pers.reus.model.client;

import pers.reus.model.handler.Prefect;
import pers.reus.model.handler.SchoolMaster;
import pers.reus.model.handler.Teacher;
import pers.reus.model.handler.impl.Handler;

public class Client {

	public static void main(String[] args) {
		//创建 教师,级长,校长 三个类
		Handler teacher = new Teacher();  
        Handler prefect = new Prefect();  
        Handler schoolMaster = new SchoolMaster();  
        
        //设置责任关系,教师无法处理交给级长,级长无法处理交给校长
        teacher.setSuccessor(prefect);  
        prefect.setSuccessor(schoolMaster);
        
        //模拟学生进行请假
        String str = teacher.HandlerRequest("小明",8);
        
        //输出请假结果
        System.out.println(str);
	}

}


Java责任链模式Chain of Responsibility模式 Chain of Responsibility定义:Chain of Responsibility(CoR) 是用一系列类(classes)试图处理一个请求request,这些类之间是一个松散的耦合,唯一共同点是在他们之间传递request。也就是说,来了一个请求,A类先处理,如果没有处理,就传递到B类处理,如果没有处理,就传递到C类处理,就这样象一个(chain)一样传递下去。 如何使用责... 阅读详情

相关推荐

JAVA设计模式职责链模式Chain of Responsibility Pattern】

一、概述     避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条,并且沿着这条传递请求,直到有对象处理它为止。职责链模式是一种对象行为型模式。     核心在于引入一个抽象处理者类 二、适用场景     请求的式处理,多个对象可以处理同一请求、但是具体由哪个对象来处理由运行时系统根据条件判断确定。     如请假业务场景:

小吕丶Code阶区 4085

Java设计模式--职责链模式Chain of Responsibility

概述 职责链模式可以将请求的处理者组织成一条,并让请求沿着传递,由上的处理者对请求进行相应的处理,客户端无须关心请求的处理细节以及请求的传递,只需将请求发送到上即可,实现请求发送者和请求处理者解耦。 定义:避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条,并且沿着这条传递请求,直到有对象处理它为止。 职责链模式是一种对象行为型模式。 实现: 定义...

yanbin 864

Java设计模式-职责链模式Chain of Responsibility

编写程序完成学校 OA 系统的采购审批项目:需求。如果金额 小于等于 5000, 由教学主任审批。如果金额 小于等于 30000, 由副校长审批。如果金额 小于等于 10000, 由院长审批。如果金额 超过 30000 以上,有校长审批。思路分析和图解(类图)

老徐的博客只有干货 609

设计模式-职责链模式(Chain of Responsibility)-Java

设计模式-职责链模式(Chain of Responsibility)-Java 目录 文章目录1、前言2、示例案例-采购单的分级审批3、职责链模式概述3.1、职责链模式定义3.2、职责链模式结构3.3、职责链模式结构图中角色3.4、职责链模式实现4、采购单分级审批完整解决方案5、纯与不纯的职责链模式5.1、纯的职责链模式5.2、不纯的职责链模式6、总结6.1、优缺点6.2、适用场景***后记*** : 内容 1、前言   “一对二”,“过”,“过”……这声音熟悉吗?你会想到什么?对!纸牌。在类似

gaogzhen的博客 393

java设计模式职责链模式 Chain of Responsibility

职责链模式: 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的藕合关系。将这个对象连成一条 ,并沿着这条传递该请求,直到有一个对象处理它为止。  1.当客户提交一个请求时,请求是沿传递直至有一个ConcreteHandler对象负责处理它。  2.接收者和发送者都没有对方的明确信息,且中的对象自己也并不知道的结构。结果是职责可简        化对象的相

jazywoo_在路上 635

java设计模式(十六)职责链模式Chain of Responsibility Pattern)

职责链模式Chain of Responsibility Pattern)的模式介绍,应用场景说明,优缺点以及代码示例讲解。

weixin_70044963的博客 640

Java设计模式——职责链模式Chain of Responsibility

责任责任链模式是一种对象的行为模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条。请求在这个上传递,直到上的某一个对象决定处理此请求。发出这个请求的客户端并不知道上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。 责任链模式结构: 源码如下:public abstract class Handler { /**

路漫漫,水迢迢 1483

Java设计模式——行为模式——职责链模式(Chain of Responsibility)

责任链模式:将能够处理同一类请求的对象连成一条,使这些对象都有机会处理请求,所提交的请求沿着传递。从而避免请求的发送者和接受者之间的耦合关系。上的对象逐个判断是否有能力处理该请求,如果能则就处理,如果不能,则传给上的下一个对象。直到有一个对象处理它为止。特点  1)被观察者需要持有一个或者多个观察者对象。  2)系统中一个模块的变化,某些模块也会跟随着变化。UML在责任链模式中,作为请求接...

qq_32465815的博客 255

Java设计模式13:职责链模式Chain Of Responsibility

Chain of Responsibility 意图 十多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这些对象连成一条,并沿着这条传递该请求,知道有一个对象处理它为止 动机 来看一个某公司请假的流程,按照请假天数,如果不大于1天,可有mentor审批,大于1天不大于2天,由leader审批,大于2天不大于5天,有项目经理审批,若大于5天需有CTO审批,...

jay_boolean的博客 230

java设计模式职责链模式Chain of Responsibility Pattern又名责任链模式

基本介绍 为请求创建了一个接受者对象的(示意图如下)。这种模式对请求的发送者和接受者进行解耦 职责链模式通常每个接受者都包含对另一个接受者的引用。如果一个对象不能处理该请求,则会将相同的请求传给下一个接受者,以此类推 职责链模式的角色及职责: Handler:抽象的处理者,定义了一个处理请求的接口,同时含有另外的Handler ConcreteHandlerA,B:具体的处理者,处理它自己负责的请求,可以访问它的后继者(即下一个处理者),如果可以处理当前请求,则处理,否则就交给后继者去处理,从而形成

hanjiangb的博客 249

JAVA设计模式十一--Chain of Responsibility(职责链模式)

职责链模式: 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的藕合关系。将这个对象连成一条 ,并沿着这条传递该请求,直到有一个对象处理它为止。  1.当客户提交一个请求时,请求是沿传递直至有一个ConcreteHandler对象负责处理它。  2.接收者和发送者都没有对方的明确信息,且中的对象自己也并不知道的结构。结果是职责可简    化对象的相

Y-CAT的专栏 2033

浅谈Java设计模式——职责链模式(Chain Of Responsibility)

一、概述         使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条, 并沿着这条传递该请求,直到有一个对象处理它为止。 这一模式的想法是,给多个对象处理一个请求的机会,从而解耦发送者和接受者。          职责链模式描述的请求如何沿着对象所组成的来传递的。它将对象组成一条,发送者将请求发给的第一个接收者,并且沿着这条传递,直到...

IdealSpring的博客 347

Java设计模式职责链模式Chain of Responsibility

目录 目的 应用实例 代码    目的 避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将他们连接成一条,并且沿着这条传递请求,直到有对象处理为止。 应用实例 职责上的处理者负责处理请求,客户只需要将请求发送到职责上即可,无须关心请求的处理细节和请求的传递。 Servlet的过滤器Fileter。 代码  package com.gar...

gary0917的博客 269

Java设计模式十一: 职责链模式(Chain of Responsibility)

职责链模式是一种对象的行为模式。在职责链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条。请求在这个上传递,直到上的某一个对象决定处理此请求。发出这个请求的客户端并不知道上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。类图:职责链模式的组成:抽象处理者(Handler)角色:定义出一个处理请求的接口。如果需要,接口可以定义出一个方

萌萌的It人 www.itmmd.com 791

设计模式(Java)----职责链模式Chain of Responsibility

定义:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系,将这些对象连成一条,并沿这条传递请求,直到有一个对象处理它为止。例题:加薪申请、上报与审批 员工向经理发起加薪申请,经理无权决定,需要向总监汇报,如果加薪额度超过总监权力范围,需要向总经理汇报。 员工还可以提交请假申请,经理可以决定2天以下的假,总监可以决定5天以下的假,其余都要上报总经理。加薪代码初步 //申请:小菜请求加薪2000/小菜请假3天 class Request{ private String reques

jiahuier的博客 266

Java设计模式-----Chain of Responsibility职责链模式

源自:http://www.blogjava.net/flustar/archive/2007/12/14/cor.html Chain of Responsibility职责链模式: 为了避免请求的发送者和接收者之间的耦合关系,使多个接受对象都有机会处理请求。将这些对象连成一条,并沿着这条传递该请求,直到有一个对象处理它为止。 例子: public class Boy {

288

JAVA设计模式十一:--Chain of Responsibility(职责链模式)

职责链模式: 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的藕合关系。将这个对象连成一条 ,并沿着这条传递该请求,直到有一个对象处理它为止。  1.当客户提交一个请求时,请求是沿传递直至有一个ConcreteHandler对象负责处理它。  2.接收者和发送者都没有对方的明确信息,且中的对象自己也并不知道的结构。结果是职责可简    化对象的相

魔都~艾辛格 625
下一篇: 【Java设计模式】· 命令模式(Command Pattern)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值