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