首页 > 编程语言 >java设计模式之职责链模式(二)

java设计模式之职责链模式(二)

时间:2022-08-29 19:24:41浏览次数:39  
标签:java 职责 08 request System println 设计模式 public String

职责链模式的一个变种如下,执行某一个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,职责,08,request,System,println,设计模式,public,String
From: https://www.cnblogs.com/wangbin2188/p/16637047.html

相关文章

  • Day03下载配置java环境以及如何删除java文件
    卸载JDK删除java的安装目录删除JAVA_HOME删除path下关于java的目录java-version安装JDK百度搜索JDK8,找下载地址同意下载协议下载电脑对应版本......
  • java设计模式之职责链模式(三)
    责任链模式有很多变种。有些责任链是构成一个list,遍历调用,有一个成功就直接返回。比如DateFormatChain有些的实现方式如下所示,是通过某个Handler手动调用下一个Handler来传......
  • JavaWeb--JavaBean与三层架构
    前言JavaWeb其实就是一个技术的总和,把Web看成一个容器而已主要使用JavaEE技术来实现.在加上各种中间件。整个javaWeb阶段的内容通过实际的案例贯穿学习,所涉及到的技......
  • java 字节码指令理解
    publicclassTest{privateintnum1=1;publicstaticintNUM1=100;publicintfunc(inta,intb){returnadd(a,b);}publicint......
  • IDEA报错:Error:java: Compilation failed: internal java compiler error
    查看这些配置,确保版本一样......
  • Javaweb-cookiea和session
    Cookie、Session1.会话会话:用户打开了浏览器,打开了多个链接,然后关闭浏览器,这就是一次会话。有状态会话:浏览器怎么证明你来过。服务端和客户端1.服务端给客户端一个......
  • 2022-8-29 javaweb 第一天 servlet/tomcat
    软件架构1、C/S架构:客户端/服务器--------QQ,Typora,腾讯会议。2、B/S架构:浏览器/服务器--------京东,爱奇艺,B站。资源分类静态资源:所有用户访问后,得到的结果都是一......
  • 关于java中system.out.println()中out的理解
    在Java编程中,我们常常用System.out.println()方法来输出,在集合中我经常看到使用方法引用的方式来遍历集合元素:xxx.foreach(System.out::println);也许我们都已经猜到printl......
  • Java设计模式 - 反射机制
    Java设计模式-反射机制......
  • Java实现MD5加密
    Java实现MD5加密1、maven引入jar包<dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId><version>1.14......