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

 

posted @   Mars.wang  阅读(60)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示