职责链设计模式在java8中的实现方式

职责链设计模式在java8中的实现方式

先看一下传统的职责链设计模式实现方式,经典责任链模式请假流程代码这里借用同行,然后我们再来看java8下职责链设计模式实现同样功能的代码。话不多说,见代码:

1、实际被处理的请求对象类
//实际被处理对象
public class ParamVO {
    
    

	private String type; // 请求类型
	private int days; // 天数
	private String remarks; // 备注

	public String getType() {
    
    
		return type;
	}

	public void setType(String type) {
    
    
		this.type = type;
	}

	public int getDays() {
    
    
		return days;
	}

	public void setDays(int days) {
    
    
		this.days = days;
	}

	public String getRemarks() {
    
    
		return remarks;
	}

	public void setRemarks(String remarks) {
    
    
		this.remarks = remarks;
	}

	public ParamVO(String type, int days, String remarks) {
    
    
		super();
		this.type = type;
		this.days = days;
		this.remarks = remarks;
	}

}

2、处理策略类,所有要处理的逻辑写在此类里,每个逻辑是一个单独的方法
//职责实际处理类,如果前面一个处理成功,后面就不处理,则要做一个处理成功的标识
//考虑处理成功后将被处理对象置为null
public class Strategy {
    
    

	// 经理处理策略
	public static ParamVO fun1(ParamVO paramVO) {
    
    
		if (paramVO == null) {
    
    
			return null;
		}
		// 经理能处理2天以内的请假申请
		if (paramVO.getDays() <= 2) {
    
    
			System.out.println("经理开始处理 >>>>>>>");
			System.out.println("因" + paramVO.getRemarks() + ",需请假" + paramVO.getDays() + "天,已批准。");
			return null;
		} else {
    
    
			// 处理不了的传递给上级
			System.out.println("经理处理不了,需上级处理 >>>>>>>");
			return paramVO;
		}
	}

	// 总监处理策略
	public static ParamVO fun2(ParamVO paramVO) {
    
    
		if (paramVO == null) {
    
    
			return null;
		}
		// 总监能处理5天以内的请假申请
		if (paramVO.getDays() <= 5) {
    
    
			System.out.println("总监开始处理 >>>>>>>");
			System.out.println("因" + paramVO.getRemarks() + ",需请假" + paramVO.getDays() + "天,已批准。");
			return null;
		} else {
    
    
			// 处理不了的传递给上级
			System.out.println("总监处理不了,需上级处理 >>>>>>>");
			return paramVO;
		}
	}

	// 总经理处理策略
	public static ParamVO fun3(ParamVO paramVO) {
    
    
		if (paramVO == null) {
    
    
			return null;
		}
		// 总经理能处理任意天以内的请假申请
		System.out.println("总经理开始处理 >>>>>>>");
		System.out.println("因" + paramVO.getRemarks() + ",需请假" + paramVO.getDays() + "天,已批准。");
		return null;
	}

}

3、测试类,职责链的初始化和请求对象的初始化,执行逻辑
public // 测试类
class Test {
    
    

	public static void main(String[] args) {
    
    
		Function<ParamVO, ParamVO> initfunction = x -> Strategy.fun1(x);
		Function<ParamVO, ParamVO> function = initfunction.andThen(Strategy::fun2).andThen(Strategy::fun3);
		System.out.println("流程1开始 >>>>>>>>");
		ParamVO paramVO = new ParamVO("请假", 1, "生病请假");
		function.apply(paramVO);

		System.out.println("流程2开始 >>>>>>>>");
		ParamVO paramVO1 = new ParamVO("请假", 5, "休息");
		function.apply(paramVO1);

		System.out.println("流程3开始 >>>>>>>>");
		ParamVO paramVO2 = new ParamVO("请假", 10, "休假");
		function.apply(paramVO2);
	}

}
4、打印执行结果

流程1开始 >>>>>>>> 经理开始处理 >>>>>>> 因生病请假,需请假1天,已批准。 流程2开始 >>>>>>>> 经理处理不了,需上级处理 >>>>>>> 总监开始处理 >>>>>>> 因休息,需请假5天,已批准。 流程3开始 >>>>>>>> 经理处理不了,需上级处理 >>>>>>> 经理处理不了,需上级处理 >>>>>>> 总经理开始处理 >>>>>>> 因休假,需请假10天,已批准。

猜你喜欢

转载自blog.csdn.net/m0_53085735/article/details/112967533