背景:刚看到一个同事用了一堆ifelse嵌套来判断是否执行最后业务逻辑,感觉很纠结,就想到能不能用责任链模式来处理这类问题。顺便记录下来备后面回顾思考
问题类似如下:
Java代码 收藏代码
if() {
if() {
if() {
....
doBusiness();
}
}
}
于是想到了责任链,直接贴代码如下:
处理接口,对外请求处理接口
package com.shuidexiongdi.chain;
public interface Handler {
/**
* 执行请求
* @return 一般的责任链不要求一定返回boolean,这是针对具体的例子设计的责任链模式
*/
public boolean doRequest();
public void setNextHandler(Handler handler);
}
抽象一个模板类
package com.shuidexiongdi.chain;
import org.apache.log4j.Logger;
public abstract class AbstractHandler implements Handler {
private static final Logger logger = Logger.getLogger(AbstractHandler.class);
Handler nextHandler;
public boolean doRequest() {
logger.info(this.getClass().getName() + "start..");
boolean flag = this.mydo();
logger.info(this.getClass().getName() + "flag: " + flag);
//如果当前逻辑正确并且需要下一个校验,则继续,否则返回当前校验
if(flag && this.getNextHandler() != null) {
return this.getNextHandler().doRequest();
}
return flag;
}
public Handler getNextHandler() {
return this.nextHandler;
}
public void setNextHandler(Handler handler) {
this.nextHandler = handler;
}
/**
* 用于校验某个逻辑是否正确
* @return
*/
public abstract boolean mydo();
}
package com.shuidexiongdi.chain;
public class OneHandler extends AbstractHandler implements Handler {
/**
* 用于校验某个逻辑是否正确
* @return
*/
public boolean mydo() {
return true;
}
}
package com.shuidexiongdi.chain;
public class TwoHandler extends AbstractHandler implements Handler {
/**
* 用于校验某个逻辑是否正确
* @return
*/
public boolean mydo() {
return true;
}
}
package com.shuidexiongdi.chain;
public class ThirdHandler extends AbstractHandler implements Handler {
/**
* 用于校验某个逻辑是否正确
* @return
*/
public boolean mydo() {
return true;
}
}
package com.shuidexiongdi.chain;
/**
* 加入某个校验返回出错的逻辑
* @author dengjianquan-ghq
*
*/
public class WrongHandler extends AbstractHandler implements Handler {
/**
* 用于校验某个逻辑是否正确
* @return
*/
public boolean mydo() {
return false;
}
}
客户端:
package com.shuidexiongdi.chain;
public class Client {
public static void main(String[] args) {
doTest1();
doTest2();
doTest3();
doTest4();
}
private static void doTest1() {
Handler handler = new OneHandler();
Handler handler2 = new TwoHandler();
Handler handler3 = new ThirdHandler();
Handler wrongHandler = new WrongHandler();
handler.setNextHandler(handler2);
handler2.setNextHandler(handler3);
handler3.setNextHandler(wrongHandler);
System.out.println(handler.doRequest());
}
private static void doTest2() {
Handler handler = new OneHandler();
Handler handler2 = new TwoHandler();
Handler handler3 = new ThirdHandler();
handler.setNextHandler(handler2);
handler2.setNextHandler(handler3);
System.out.println(handler.doRequest());
}
private static void doTest3() {
Handler handler = new OneHandler();
Handler handler2 = new TwoHandler();
Handler handler3 = new ThirdHandler();
handler.setNextHandler(handler2);
handler2.setNextHandler(handler3);
handler3.setNextHandler(null);
System.out.println(handler.doRequest());
}
private static void doTest4() {
Handler handler = new OneHandler();
Handler handler2 = new TwoHandler();
Handler handler3 = new ThirdHandler();
Handler wrongHandler = new WrongHandler();
handler.setNextHandler(handler2);
handler2.setNextHandler(wrongHandler);
wrongHandler.setNextHandler(handler3);
System.out.println(handler.doRequest());
}
}
分享到:
相关推荐
总结来说,Spring责任链模式为开发者提供了一种优雅的方式处理请求和事件,使得系统更易于扩展和维护。通过理解和熟练运用这一模式,我们可以构建出更加灵活和可复用的组件,提高代码质量和效率。
责任链模式是设计模式中的一种行为模式,它允许在对象之间建立一条处理请求的链条,每个对象都包含对请求的处理逻辑,以及将请求传递给下一个对象的能力。这种模式使得请求可以在链上的对象之间传递,直到被某个对象...
总结来说,"责任链模式代码"可能包含了一个用代码实现的责任链模式示例,其中可能包括请求类、抽象处理类和若干个具体处理类,以及构建链和发送请求的代码。通过对这些代码的分析和学习,我们可以更好地理解和运用...
4. **责任链模式**:责任链模式是行为型设计模式,它使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合。在这个模式中,请求沿着处理者链进行传递,每个处理者都有机会处理请求,或者将请求传递...
责任链模式是一种行为设计模式,它允许我们把请求沿着处理者对象的链式结构进行传递,直到某个对象处理这个请求。这种模式使得我们能够将请求的...理解和掌握责任链模式对于提升iOS应用的设计质量和可维护性至关重要。
责任链模式在实际开发中有很多应用,例如事件驱动编程、异步任务处理、权限控制等场景。通过这种方式,我们可以轻松地添加、删除或调整处理器,而不必更改已有的代码,大大提高了系统的可维护性和可扩展性。在...
下面将详细探讨责任链模式的概念、结构、优点以及在实际开发中的应用。 责任链模式的核心思想是建立一个处理请求的对象链,每个对象(处理者)都包含对下一个处理者的引用。当一个请求到来时,它会依次由链上的每一...
总的来说,责任链模式提供了一种灵活的方式来组织和管理多个处理步骤,使得添加、删除或修改过滤逻辑变得简单,同时也降低了系统的耦合度。在"责任链模式小demo"中,我们能够看到这种模式的具体实现和工作原理,为...
在Java、C#等面向对象语言中,责任链模式广泛应用于事件驱动编程、日志记录系统和工作流管理等领域。 在责任链模式中,通常有以下几个关键角色: 1. 抽象处理者(Handler):定义了一个接收到请求的接口,并可以将...
总结来说,责任链模式是一种行为设计模式,它使我们能够构建一个处理请求的对象链,每个对象都可以独立处理请求或传递给链中的下一个对象。这提供了一种灵活的方式来组织和扩展应用程序的处理流程,同时也降低了组件...
例如,在Web开发中,过滤器(Filter)机制就是一种典型的责任链模式应用,每个过滤器可以对请求进行预处理或后处理,决定是否继续传递给下一个过滤器。 总结来说,责任链模式是一种有效的解耦手段,它提供了一种...
在给定的场景中,员工请假的审批流程就是一个很好的责任链模式应用实例。例如,员工请假一天半到一天,由直接主管批准;请假一天到三天,需部门经理批准;三天到三十天,由总经理审批;超过三十天则不批准。这个过程...
在Java Web开发中,Filter接口就是责任链模式的一个典型应用,用于实现请求预处理和后处理功能。 在Java Web中,Filter是Servlet规范的一部分,它提供了一种在请求到达目标Servlet之前对其进行拦截和处理的方式。`...
责任链模式(Chain of Responsibility)是一种行为设计模式,它允许将请求沿着处理者对象的链进行传递,直到某个对象能够处理这个请求为止。在Java中,我们可以通过接口和类的组合来实现这种模式。让我们深入探讨...
责任链模式是一种设计模式,属于行为模式类别,它在软件工程中被广泛应用于处理一系列相互关联的处理步骤,使得请求可以在一系列对象之间传递,直到找到合适的处理者。这种模式允许在不指定具体处理对象的情况下,将...
总结来说,责任链模式在C++中的应用有助于创建动态、灵活的处理流程。通过定义处理者对象的链,可以方便地添加或移除处理者,同时保持代码的整洁和模块化。在实际开发中,特别是在需要处理不同类型请求或事件的场景...
在实际应用中,责任链模式常用于事件处理、权限控制、工作流系统等场景,提供了一种灵活、可扩展的方式来分发和处理各种请求。在"Simple"版本中,我们可能会看到一个简化的实现,但它展示了责任链模式的基本原理和...
在“java设计模式之责任链模式”的主题中,我们可以深入探讨如何在实际项目中应用责任链模式,包括但不限于以下方面: 1. **代码结构优化**:通过责任链模式,可以使代码结构更加清晰,降低类间的耦合度。 2. **可...