public class functionTest {
public static void main(String[] args) {
new Opt().f1("s");
new Opt().f2("s");
new Opt().f3("s");
}
}
class Opt {
private String commonF(String s, Function<String, String> function) {
// 共性代码10条
System.out.println("start:"+s);
String result = function.apply(s);
System.out.println("end:"+s);
// 共性代码20条
System.out.println(result);
return result;
}
public String f1(String s) {
s = commonF(s, this::opt1);
return s;
}
public String f2(String s) {
s = commonF(s, this::opt2);
return s;
}
public String f3(String s) {
s = commonF(s, this::opt3);
return s;
}
private String opt1(String s) {
s+="1";
return s;
}
private String opt2(String s) {
s+="2";
return s;
}
private String opt3(String s) {
s+="3";
return s;
}
}
如果不简化,可能是如下这样的:
public String f1(String s) {
// 共性代码10条
System.out.println("start:"+s);
s = this.opt1(s);
System.out.println("end:"+s);
// 共性代码20条
System.out.println(s);
return s;
}
public String f2(String s) {
// 共性代码10条
System.out.println("start:"+s);
s = this.opt2(s);
System.out.println("end:"+s);
// 共性代码20条
System.out.println(s);
return s;
}
public String f3(String s) {
// 共性代码10条
System.out.println("start:"+s);
s = this.opt3(s);
System.out.println("end:"+s);
// 共性代码20条
System.out.println(s);
return s;
}
既是是把 上面的共性代码封装成一个方法,下面的共性代码再封装一个方法,还是避免不了,会有 调用 封装后 的 方法 这行代码的重复编写;
