Java最全结合JDK学习设计模式-—行为型设计模式——责任链模式,java面试思维逻辑题

总结

这份面试题几乎包含了他在一年内遇到的所有面试题以及答案,甚至包括面试中的细节对话以及语录,可谓是细节到极致,甚至简历优化和怎么投简历更容易得到面试机会也包括在内!也包括教你怎么去获得一些大厂,比如阿里,腾讯的内推名额!

某位名人说过成功是靠99%的汗水和1%的机遇得到的,而你想获得那1%的机遇你首先就得付出99%的汗水!你只有朝着你的目标一步一步坚持不懈的走下去你才能有机会获得成功!

成功只会留给那些有准备的人!

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

public void checkLoginParam(LoginRequest request){
    if ("name".equals(request.getRequestType())){
        // 姓名的检验逻辑
    }else if ("age".equals(request.getRequestType())){
        // 年龄的校验逻辑
    }
    //其他的校验逻辑...............
}

很容易发现 代码会随着后期校验逻辑的增加 越来越长,越复杂。耦合性很高,而且新增校验逻辑需要修改以前的代码判断分支,也违背了单一职责原则和开闭原则。

使用后的效果:

如何解决这个复杂校验逻辑,还能满足设计原则呢?

推荐使用 责任链模式,当然,责任链模式的实现方法很多

javax.servlet.Filter#doFilter 使用 过滤器数组 移动数组索引实现 调用下一个过滤器 (核心类 ApplicationFilterChain)

我先采用最简单的嵌套构造的方式来实现:

先看下类图,有个总体的认知

  • 核心 任务处理父类

  • LoginHandler :定义处理请求的接口,并且实现后继链(handler)

public abstract class LoginHandler {

protected LoginHandler handler;

public LoginHandler(LoginHandler handler){

this.handler = handler;

}

protected abstract void handlerLoginRequest(LoginRequest request);

}

具体的处理器类:

1. 年龄校验逻辑

public class LoginAgeHandler extends LoginHandler {

public LoginAgeHandler(LoginHandler handler){

super(handler);

}

@Override

protected void handlerLoginRequest(LoginRequest request) {

if (“age”.equals(request.getRequestType())){

System.out.println("LoginAgeHandler----》 " + request.getTaskName());

return;

}

if (null != handler){

handler.handlerLoginRequest(request);

}

}

}

2. 姓名校验逻辑:

public class LoginNameHandler extends LoginHandler {

public LoginNameHandler(LoginHandler handler){

super(handler);

}

/**

  • 处理完成自己的逻辑后 判断是否需要交给下一个处理器来处理

  • @param request

*/

@Override

protected void handlerLoginRequest(LoginRequest request) {

if (“name”.equals(request.getRequestType())){

// query user from db, if exist execute next stop

System.out.println(“LoginNameHandler–》” + request.getTaskName());

}

// 交给下一个处理器处理 请求任务

if (null != handler){

handler.handlerLoginRequest(request);

}

}

}

待处理的任务类:

public class LoginRequest {

private String requestType;

private String taskName;

public LoginRequest(String requestType, String taskName) {

this.requestType = requestType;

this.taskName = taskName;

}

public String getRequestType() {

return requestType;

}

public String getTaskName() {

return taskName;

}

}

最后,我们做一下调用测试:

package com.cheri.designpattern.cases.action;

/**

  • 嵌套过滤器,内部依次判断是否存在 执行过滤器

  • @author Aaron Du

  • @version V1.0

  • @date 2020/5/1 15:08

**/

public class Client {

public static void main(String[] args) {

Ending

Tip:由于文章篇幅有限制,下面还有20个关于MySQL的问题,我都复盘整理成一份pdf文档了,后面的内容我就把剩下的问题的目录展示给大家看一下

如果觉得有帮助不妨【转发+点赞+关注】支持我,后续会为大家带来更多的技术类文章以及学习类文章!(阿里对MySQL底层实现以及索引实现问的很多)

吃透后这份pdf,你同样可以跟面试官侃侃而谈MySQL。其实像阿里p7岗位的需求也没那么难(但也不简单),扎实的Java基础+无短板知识面+对某几个开源技术有深度学习+阅读过源码+算法刷题,这一套下来p7岗差不多没什么问题,还是希望大家都能拿到高薪offer吧。

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

不简单),扎实的Java基础+无短板知识面+对某几个开源技术有深度学习+阅读过源码+算法刷题,这一套下来p7岗差不多没什么问题,还是希望大家都能拿到高薪offer吧。

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 26
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值