再構築、テスト、デバッグ

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("...");