Java软件设计模式之职责链模式
简述
定义:一种设计模式。把可以响应请求的对象组织成一条链,并在这条链上传递请求,从而保证多个对象都有机会处理请求并可以避免请求方和响应方的紧密耦合。(百度搜的)
应用场景
- 职责链可以是一条直线、一个环或者一个树形结构,最常见的职责链是直线型,即沿着一条单向的链来传递请求。职责链可以是一条直线、一个环或者一个树形结构,最常见的职责链是直线型,即沿着一条单向的链来传递请求。
- 链上的每一个对象都是请求处理者,职责链模式可以将请求的处理者组织成一条链,并使请求沿着链传递,由链上的处理者对请求进行相应的处理,客户端无须关心请求的处理细节以及请求的传递,只需将请求发送到链上即可,将请求的发送者和请求的处理者解耦。
职责链模式包含如下角色:
Handler: 抽象处理者
ConcreteHandler: 具体处理者
Client: 客户类
模式结构如下图所示:
职责链模式涉及的角色及其职责如下:
客户类Client发送请求到抽象处理者Handler这里,该抽象处理者相当于一个接口。
具体处理者ConcreteHandlerA类和ConcreteHandlerB类是抽象处理者Handler的子类,它们处理它所负责的请求,可访问它的后继者,如果可处理该请求,就处理之,否则就将该请求转发给它的后继者。
代码实例
//抽象处理者代码示例
public abstract class Handler
{
protected Handler successor;
public void setSuccessor(Handler successor)
{
this.successor=successor;
}
public abstract void handleRequest(String request);
}
具体处理者代码
public class ConcreteHandler extends Handler
{
public void handleRequest(String request)
{
if(请求request满足条件)
{
...... //处理请求;
}
else
{
this.successor.handleRequest(request); //转发请求
}
}
}
关于职责链模式的讨论
根据以上对于职责链模式的概念和实例介绍可以看出,职责链模式具有以下优势:
- 降低耦合度
- 可简化对象的相互连接
- 增强给对象指派指责的灵活性
- 增加新的请求处理类很方便
同样,职责链模式也有一定的缺点如下:
- 不能保证请求一定被接收
- 系统性能将受到一定影响,而且在进行代码调试时不太方便,可能会造成循环调用。
即为
1、客户端与具体的处理者解耦,客户端只认识一个Hanlder接口,降低了客户端(即请求发送者)与处理者的耦合度。
2、客户端和处理者都不关心职责链的具体结构,而是交给职责链的创造者,也正因为如此,当在职责链中添加处理者的时候,这对客户端和处理者来说,都是透明的,二者不知道也不必要知道职责链的变化。
3、举个栗子,你要去一家店的五家分店买东西,他们的货源不尽相同,普通来说,你得一家家逛完直到买到你想要的东西,而职责链模式,你把你的购货需求给到第一家,如果第一家没有,他们自己就挨个往下走给你逛完所有店直到买你想要的东西。
最后
- 本人小白一枚,第一次写博客不太会写,很多不正确的地方希望大家多多批评指正。