ボクココ

個人開発に関するテックブログ

インタフェースを実装したオブジェクトの共通処理をどうにかする

久々にJavaネタ。

interface を用意し、複数のそれを実装したオブジェクトを作ったとき、それぞれ実装したメソッドの中身が似通って困っちゃうってことがあった。その時にどうすればいいかの対応。

interface Outputtable {
  void output();
}

class MyCode implements Readable{
  @Override
  public void output() {
     System.out.println("Hello.");
     System.out.println("bad!");
  }
}

class YourCode implements Readable {
  @Override
  public void output() {
    System.out.println("Hello.");
    System.out.println("good!");
  }
]

Readable readable = new YourCode();
readable.output();

さて、ここで System.out.println("Hello.");が共通処理となってしまった。どうしましょう? そこで今回登場するのが、インタフェースのオブジェクトをフィールドに持つクラス。

class Output {
  private Readable readable;

  public Output(Readable readable) {
    this.readable = readable;
  }

  public void hello() {
    System.out.println("Hello.");
    readable.output()
  }
}

Output output = new Output(new YourCode());
output.hello();

こうすれば、上で書いた重複で書いていた System.out.println("Hello.");は共通化される。

今回はこんな感じのコードを書いたので、残しておこう。デザインパターン的に何かとかは知らん。w