我去公司面试,人事经理面试没有过,我却把责任链模式学会了

设计模式在开发当中是运用特别多的,设计模式就是参照我们日常生活特性,抽象出特性,从而某种实现达到具体要求。当然这当中一定是灵活转变,责任链正式拉开序幕。

我去某某互联网公司去面试,好的方向的流程大致应该是,你上招聘软件投递简历,简历筛选通过,hr邀约面试,面试流程自然是,项目经理,技术总监,老板,Hr行政。大的维度自然是这样,得出结论就有了下面一个图。

我去公司面试,人事经理面试没有过,我却把责任链模式学会了

你会进行一轮面试,面试的过程类似一个责任的关系链,这个流程必须安装规范规定来,你不能直接去和Hr谈薪资,更不能直接去和老板面试,这就是具体的特性。

你要面试过了项目经理,那你就得去和技术总监面试,技术总监面试过了,你得老板谈一谈,老板要觉得合适,就直接让Hr联系你。基本老板会问你大概的期望。

但是我3轮下来我面试都过了,hr那里面试我却被pass掉了,Hr问了一个问题,你工作六年怎么换了4,5家公司,其实就是内心反问你这小伙子还是太年轻了,其实你内心早就按耐不住,你想说我想跳就跳,我打工赚钱。但是你不能这么说,明明就是要钱的事,但是你却要说得无比的高尚情操。互联网也是内卷得太严重..........

开始正题:

责任链设计模式:通俗易懂地来说,一套流程,一套规范,特定的行为,指定的实现,组合成一个设计模式。

根据以上场景我们得出结论:

抽取公共行为和方法:进行面试,面试结果反馈,下一轮面试,全局的面试记录。

定义抽象hanlder:

package com.xy.design.hanlder;

/**
 * <p>
 *  抽取公共实现方法,共同行为,面试
 * @author xy
 * @since 2021-10-21
 */
public abstract class InterviewHanlder {

    /**
     * 定义一个全局的Hanlder
     */
    protected InterviewHanlder interviewHanlder;

    /**
     * 抽取共同行为的方法,面试
     */
    public abstract void getTheInterview();

    /**
     * 面试结果反馈下一轮面试
     * @param nextGatewayHandler
     */
    public void setNextGatewayHandler(InterviewHanlder nextGatewayHandler) {
        this.interviewHanlder = nextGatewayHandler;
    }



    /**
     * 继续下一轮的面试
     */
    protected void nextInterviewFlag() {
        if (interviewHanlder != null)
            interviewHanlder.getTheInterview();
    }

责任流程实现:

第一关项目经理面试实现:

package com.xy.design.hanlder.impl;

import com.xy.design.common.Constants;
import com.xy.design.hanlder.InterviewHanlder;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

/**
 * 项目经理面试
 * 第一关面试
 */
@Service(Constants.INTERVIEW_PM)
@Component
public class PMHandler extends InterviewHanlder {


    @Override
    public void getTheInterview() {
        System.out.println("项目经理面试--通过----------------");
        nextInterviewFlag();
    }
}

第二关技术总监面试实现:

package com.xy.design.hanlder.impl;

import com.xy.design.common.Constants;
import com.xy.design.hanlder.InterviewHanlder;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

/**
 * 技术总监面试
 * 第二关面试
 */
@Service(Constants.INTERVIEW_JS)
@Component
public class TechnologyHandler extends InterviewHanlder {

    @Override
    public void getTheInterview() {
        System.out.println("技术总监面试--通过----------------");
        nextInterviewFlag();
    }
}

第三关,老板面试实现:

package com.xy.design.hanlder.impl;

import com.xy.design.common.Constants;
import com.xy.design.hanlder.InterviewHanlder;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

/**
 * 老板面试
 * 第三关面试
 */
@Service(Constants.INTERVIEW_BOOS)
@Component
public class BoosHandler extends InterviewHanlder {


    @Override
    public void getTheInterview() {
        System.out.println("老板面试--通过----------------");
        nextInterviewFlag();
    }
}

第四关 hr面试实现

package com.xy.design.hanlder.impl;

import com.xy.design.common.Constants;
import com.xy.design.hanlder.InterviewHanlder;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

/**
 * hr面试
 * 第四关hr行政面试
 */
@Service(Constants.INTERVIEW_HR)
@Component
public class HrHandler extends InterviewHanlder {


    @Override
    public void getTheInterview() {
        System.out.println("HR谈面试--通过----------------");

    }
}

具体实现类:

package com.xy.design.service;

import com.xy.design.common.Constants;
import com.xy.design.hanlder.InterviewHanlder;
import com.xy.design.utils.SpringUtils;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

/**
 * <p>
 * 责任链具体实现类
 * @author xy
 * @since 2021-10-21
 */
@Service
public class interviewHanlderServiceImpl implements InterviewHandlerService {

 
    private InterviewHanlder firstGatewayHandler;

    
    @Override
    public InterviewHanlder getHandler() {
        //todo 这里最好是写成动态数据库配置 我这里测试使用写死的方式
        InterviewHanlder firstInterviewHanlder = SpringUtils.getBean(Constants.INTERVIEW_PM, InterviewHanlder.class);
        //根据顺序依次设置责任链执行
        List<String> hanlderList = new ArrayList<>();
        hanlderList.add(Constants.INTERVIEW_JS);
        hanlderList.add(Constants.INTERVIEW_BOOS);
        hanlderList.add(Constants.INTERVIEW_HR);
        //用一个临时变量接收全局Hanlder
        InterviewHanlder temoInterviewHanlder = firstInterviewHanlder;
        for (String hanlder : hanlderList) {
          //通过代理获取实现类SpringContenxt
            InterviewHanlder hanlderImpl = SpringUtils.getBean(hanlder, InterviewHanlder.class);
            temoInterviewHanlder.setNextGatewayHandler(hanlderImpl);
        }
        this.firstGatewayHandler = firstInterviewHanlder;
        return firstGatewayHandler;
    }
}

公共参数:

/**
 * 项目经理标识
 */
public static    String INTERVIEW_PM = "pm";

/**
 * 技术总监标识
 */

public  static  String INTERVIEW_JS = "js";


/**
 * 老板标识
 */

public  static  String INTERVIEW_BOOS = "boos";


/**
 * Hr标识
 */

public  static  String INTERVIEW_HR = "hr";

控制器:

package com.xy.design.controller;


import com.xy.design.hanlder.InterviewHanlder;
import com.xy.design.service.InterviewHandlerService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HandlerController {
    @Autowired
    private InterviewHandlerService interviewHandlerService;

    @RequestMapping("/interview")
    public String interview() {
        InterviewHanlder interviewHanlder = interviewHandlerService.getHandler();
        interviewHanlder.getTheInterview();
        return "面试pass掉了,Hr让我给她钱让我去公司学习技术.......";
    }
}

我去公司面试,人事经理面试没有过,我却把责任链模式学会了

我去公司面试,人事经理面试没有过,我却把责任链模式学会了

我去公司面试,人事经理面试没有过,我却把责任链模式学会了

成功了,我们完整的一套完整的责任链就实现了。一关有一关,是不是超级简单。

上一篇:2019年广东工业大学腾讯杯新生程序设计竞赛


下一篇:20200109 java.util.StringJoiner