再構築、テスト、デバッグ
2225 ワード
コードの柔軟性の向上
条件付きifの遅延実行
public static void main(String[] args) {
// genString, genString
print(false, genString());
// genString supplier.get()
print(false, () -> genString());
}
// Supplier
public static void print(boolean b, Supplier genString) {
if (b)
System.out.println(genString.get());
}
public static void print(boolean b, String s) {
if (b)
System.out.println(s);
}
public static String genString() {
System.out.println("genString");
return "string";
}
オービット実行モード
//
@FunctionalInterface
public interface BufferedReaderProcessor {
String process(...);
}
// ,
public static String processFile(BufferedReaderProcessor p) {
// ,
...
//
p.process(br);
// ,
...
}
// lambda,
String oneLine = processFile((BufferedReader br) -> ...);
String twoLine = processFile((BufferedReader br) -> ...);
設計モードの再構築
ポリシー・モード
// new , lambda , new
Validator numericValidator = new Validator((String s) -> ...);
Validator lowerValidator = new Validator((String s) -> ...);
boolean b1 = numericValidator.validate("...");
boolean b2 = lowerValidator.validate("...");
テンプレートモード
// , Consumer , ( , )
public void processTemplate(int id, Consumer logicCode) {
XXX xxx = getXXXX(id); //
logicCode.accept(xxx); // comsumer.accept
closeXXX();
}
オブザーバモード
// lambda , new
f.registerObserver((String tweet) -> {...});
責任チェーンモード
// handler UnaryOperation
UnaryOperation headerProcessing = (String text) -> "From Raoul ... ";
UnaryOperation spellCheckerProcessing = (String text) -> text.replaceAll(...);
// Function handler
Function pipeline = headerProcessing.andThen(spellCheckerProcessing);
String result = pipeline.apply("...");
public static void main(String[] args) {
// genString, genString
print(false, genString());
// genString supplier.get()
print(false, () -> genString());
}
// Supplier
public static void print(boolean b, Supplier genString) {
if (b)
System.out.println(genString.get());
}
public static void print(boolean b, String s) {
if (b)
System.out.println(s);
}
public static String genString() {
System.out.println("genString");
return "string";
}
//
@FunctionalInterface
public interface BufferedReaderProcessor {
String process(...);
}
// ,
public static String processFile(BufferedReaderProcessor p) {
// ,
...
//
p.process(br);
// ,
...
}
// lambda,
String oneLine = processFile((BufferedReader br) -> ...);
String twoLine = processFile((BufferedReader br) -> ...);
ポリシー・モード
// new , lambda , new
Validator numericValidator = new Validator((String s) -> ...);
Validator lowerValidator = new Validator((String s) -> ...);
boolean b1 = numericValidator.validate("...");
boolean b2 = lowerValidator.validate("...");
テンプレートモード
// , Consumer , ( , )
public void processTemplate(int id, Consumer logicCode) {
XXX xxx = getXXXX(id); //
logicCode.accept(xxx); // comsumer.accept
closeXXX();
}
オブザーバモード
// lambda , new
f.registerObserver((String tweet) -> {...});
責任チェーンモード
// handler UnaryOperation
UnaryOperation headerProcessing = (String text) -> "From Raoul ... ";
UnaryOperation spellCheckerProcessing = (String text) -> text.replaceAll(...);
// Function handler
Function pipeline = headerProcessing.andThen(spellCheckerProcessing);
String result = pipeline.apply("...");