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天,已批准。