【大白话设计模式】Kotlin整合责任链模式案例

前言

设计模式结合需求、设计场景进行学习,会事半功倍

需求

针对老师的手机号、姓名字段进行参数校验,每个字段校验规则有N多条,且校验规则提示只能返回最先不满足的一个条件

校验流程图

在这里插入图片描述

如图所示,当我们的校验链路越来越长的时候,会发现我们的代码十分臃肿,定位具体的校验逻辑也十分不方便,因此才诞生了使用责任链模式代码解耦的想法。

责任链模式

主要思想:当前处理者处理任务,处理过程中发现自己无法完成任务,则判断是否有下一个处理者;如果有下一个处理者,则安排下一个处理者处理当前任务,直至最后一个处理者处理为止。

在这里插入图片描述

可以看到,图片中只有两个return出口,一个是handler处理当前任务成功后的return,另一个是直到最后一个handler都没有能处理任务则直接return

代码实现

以教师手机号判断举例

手机号校验 - 抽象处理者
abstract class TeacherPhoneChainHandler {

    protected var nextHandler: TeacherPhoneChainHandler? = null

    fun getNext(): TeacherPhoneChainHandler? { return nextHandler }

    fun setNext(next: TeacherPhoneChainHandler) { this.nextHandler = next }

    abstract fun handleRequest(teacherPhone: String): Result

}
手机号判空 - 具体处理者
class TeacherPhoneIllegalProcessor: TeacherPhoneChainHandler() {

    /**
     * 判断教师手机号是否格式正确
     */
    override fun handleRequest(teacherPhone: String): Result {
        return if (!PhoneUtils.isPhone(teacherPhone)) {
                return resultData
        } else {
            // 当前处理者无法解决,获取下一个具体处理者处理
            if (getNext() != null) {
                getNext()!!.handleRequest(teacherPhone)
            } else {
                return resultData
            }
        }
    }

}
手机号判空逻辑 - 具体处理者
class TeacherPhoneImplyProcessor: TeacherPhoneChainHandler() {

    /**
     * 老师手机号判空
     */
    override fun handleRequest(teacherPhone: String): Result {
        return if (teacherPhone.isNullOrBlank()) {
            return resultData;
        } else {
            // 当前处理者无法解决,获取下一个具体处理者处理
            if (getNext() != null) {
                getNext()!!.handleRequest(teacherPhone)
            } else {
                return resultData
            }
        }
    }

}
调用
     // 1、手机号判空
     val phoneImplyValid = TeacherPhoneImplyProcessor()
     // 2、手机号格式校验
     val phoneIllegalValid = TeacherPhoneIllegalProcessor()

     // 指定步骤:先判空手机号,再判手机号格式,先不满足条件的先返回
     phoneImplyValid.setNext(phoneIllegalValid)
     val result = phoneImplyValid.handleRequest(teacherPhone)
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值