java设计模式之职责链模式(二)
2022/8/30 1:22:48
本文主要是介绍java设计模式之职责链模式(二),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
职责链模式的一个变种如下,执行某一个handler,用当前handler是否执行成功判断是否要执行下一个handler,
首先我们定义一个抽象handler类,如果当前handler执行不成功,且还有下一个handler,则继续往下执行
public abstract class Handler { protected Handler nextHandler; public void setNextHandler(Handler nextHandler) { this.nextHandler = nextHandler; } public final void handle(String request) { boolean b = doHandle(request); if (!b && this.nextHandler != null) { nextHandler.handle(request); } } protected abstract boolean doHandle(String request); }
下面实现借助之前解析时间字符串的案例,写三个handler实现类
public class HandlerA extends Handler{ @Override protected boolean doHandle(String request) { try { LocalDate parse = LocalDate.parse(request); System.out.println("HandlerA"); System.out.println(parse); return true; } catch (Exception e) { System.err.println(e.getMessage());; } return false; } } public class HandlerB extends Handler { @Override protected boolean doHandle(String request) { try { LocalDateTime parse = LocalDateTime.parse(request); System.out.println("HandlerB"); System.out.println(parse); return true; } catch (Exception e) { System.err.println(e.getMessage()); } return false; } } public class HandlerC extends Handler { public static final DateTimeFormatter dtFormat = DateTimeFormatter.ofPattern("yyyy年MM月dd日"); @Override protected boolean doHandle(String request) { try { TemporalAccessor parse = dtFormat.parse(request); System.out.println("HandlerC"); System.out.println(parse); return true; } catch (DateTimeParseException e) { System.err.println(e.getMessage()); } return false; } }
我们定义一个入口函数
public class App { public static void main(String[] args) { Handler handler1 = new HandlerA(); Handler handler2 = new HandlerB(); Handler handler3 = new HandlerC(); handler1.setNextHandler(handler2); handler2.setNextHandler(handler3); String d1="2022-08-08"; String d2="2022-08-08T10:09:09"; String d3="2022年08月08日"; handler1.handle(d3); } }
前面两个handler失败了,最后一个成功了,结果如下
输出:
Text '2022年08月08日' could not be parsed at index 4 Text '2022年08月08日' could not be parsed at index 4 HandlerC {},ISO resolved to 2022-08-08
这篇关于java设计模式之职责链模式(二)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-13TiDB + ES:转转业财系统亿级数据存储优化实践
- 2024-05-09“2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)”实战课程已上线
- 2024-05-09聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用
- 2024-05-09log4j2这么配就对了
- 2024-05-09nginx修改Content-Type
- 2024-05-09Redis多数据源,看这篇就够了
- 2024-05-09Google Chrome驱动程序 124.0.6367.62(正式版本)去哪下载?
- 2024-05-09有没有大佬知道这种数据应该怎么抓取呀?
- 2024-05-09这种运行结果里的10.100000001,怎么能最快改成10.1?
- 2024-05-09企业src漏洞挖掘-有意思的命令执行