Java设计模式之十九(职责链模式)

职责链模式是一种行为设计模式,它使你能在不指定接收者的情况下将请求发送到处理链。本文介绍了该模式的定义、应用场景、基本条件、结构、角色职责以及优缺点,并提供了代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、什么是职责链模式

Chain of Responsibility(CoR)模式也叫职责链模式或者职责连锁模式,是行为模式之一,该模式构造一系列分别担当不同的职责的类的对象来共同完成一个任务,这些类的对象之间像链条一样紧密相连,所以被称作职责链模式。


二、职责链模式的应用场景

例1:比如客户Client要完成一个任务,这个任务包括a,b,c,d四个部分。 首先客户Client把任务交给A,A完成a部分之后,把任务交给B,B完成b部分,...,直到D完成d部分。

例2:比如政府部分的某项工作,县政府先完成自己能处理的部分,不能处理的部分交给省政府,省政府再完成自己职责范围内的部分,不能处理的部分交给中央政府,中央政府最后完成该项工作。

例3:软件窗口的消息传播。

例4:SERVLET容器的过滤器(Filter)框架实现。


三、职责链模式的基本条件

要实现Chain of Responsibility模式,需要满足该模式的基本条件:

1,对象链的组织。需要将某任务的所有职责执行对象以链的形式加以组织。

2,消息或请求的传递。将消息或请求沿着对象链传递,以让处于对象链中的对象得到处理机会。

3,处于对象链中的对象的职责分配。不同的对象完成不同的职责。

4,任务的完成。处于对象链的末尾的对象结束任务并停止消息或请求的继续传递。


四、职责链模式的结构


五、职责链模式的角色和职责

Handler 处理类的抽象父类。


concreteHandler 具体的处理类。


六、职责链模式的优缺点

优点:

1。责任的分担。每个类只需要处理自己该处理的工作(不该处理的传递给下一个对象完成),明确各类的责任范围,符合类的最小封装原则。

2。可以根据需要自由组合工作流程。如工作流程发生变化,可以通过重新分配对象链便可适应新的工作流程。

3。类与类之间可以以松耦合的形式加以组织。

缺点:

因为处理时以链的形式在对象间传递消息,根据实现方式不同,有可能会影响处理的速度。


代码实现:

Handler:

package com.qianyan.cor;

public abstract class CarHandler {

	protected CarHandler carHandler;
	
	public CarHandler setNextHandler(CarHandler carHandler) {
		this.carHandler = carHandler;
		return carHandler;
	}
	 
        //组装车
	public abstract void HandlerCar();
}

concreteHandler:

package com.qianyan.cor;

public class CarHeadHandler extends CarHandler {

	public void HandlerCar() {
		System.out.println("组装车头");
		if(this.carHandler != null)
			this.carHandler.HandlerCar();
	}

}

package com.qianyan.cor;

public class CarBodyHandler extends CarHandler {

	@Override
	public void HandlerCar() {
		System.out.println("组装车身");
		if(this.carHandler != null)
			this.carHandler.HandlerCar();
	}

}

package com.qianyan.cor;

public class CarTailHandler extends CarHandler {

	@Override
	public void HandlerCar() {
		System.out.println("组装车尾");
		if(this.carHandler != null)
			this.carHandler.HandlerCar();
	}

}

测试类:

package com.qianyan.cor;

public class MainClass {

	public static void main(String[] args) {
		CarHandler headH = new CarHeadHandler();
		CarHandler headB = new CarBodyHandler();
		CarHandler headT = new CarTailHandler();
		
		//组装顺序预先设定好,顺序是车头-->车身-->车尾
		headH.setNextHandler(headB).setNextHandler(headT);
		
		//调用职责链的链头来完成操作
		headH.HandlerCar();
	}
}

测试结果:

组装车头
组装车身
组装车尾

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值