LoginSignup
0
0

More than 3 years have passed since last update.

java コールバックパターン

Last updated at Posted at 2020-03-22

javaでコールバックパターンの簡単なサンプル

文字列を
・CamelCase → snake_case
・小文字 → 大文字
した後に表示する処理を例にやってみる

コールバックパターンを用いない場合

NoCallbackPattern.java
public class NoCallbackPattern {
    /**
     * CamelCaseからsnake_caseへ変換
     */
    private String camelToSnake(String input) {
        return CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, input);
    }

    /**
     * 小文字から大文字へ変換
     */
    private String capitalize(String input) {
        return input.toUpperCase();
    }

    /**
     * 変換して表示
     */
    public void print(String input) {
        System.out.println(capitalize(camelToSnake(input)));
    }
}
Main.java
public class Main {
    public static void main(String[] args) {
        NoCallbackPattern noCallbackPattern = new NoCallbackPattern();
        noCallbackPattern.print("replaceString");
    }
}

コールバックパターンで書いた場合

CallbackPattern.java
public class CallbackPattern {
    private List<MyFilter> myFilters;

    public CallbackPattern(List<MyFilter> myFilters) {
        this.myFilters = myFilters;
    }

    public void print(String input) {
        String output = input;
        for (MyFilter myFilter : myFilters) {
            output = myFilter.replace(output);
        }
        System.out.println(output);
    }
}
MyFilter.java
public interface MyFilter {
    String replace(String input);
}
CamelToSnake.java
public class CamelToSnake implements MyFilter {
    @Override
    public String replace(String input) {
        return CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, input);
    }
}
Capitalize.java
public class Capitalize implements MyFilter {
    @Override
    public String replace(String input) {
        return input.toUpperCase();
    }
}
Main.java
public class Main {
    public static void main(String[] args) {
        List<MyFilter> filters = Arrays.asList(new CamelToSnake(), new Capitalize());
        CallbackPattern callbackPattern = new CallbackPattern(filters);
        callbackPattern.print("replaceString");
    }
}

コールバックパターンを用いて書いた方が、printメソッドがMyFilterインターフェースにしか依存していないため、変換処理を追加する場合にCallbackPatternクラスの修正が必要ないことがわかります

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0