0
0

More than 3 years have passed since last update.

Builder パターンが嫌い

Posted at

コンストラクタのあるクラスなら継承ができる

Hoge.java
class Hoge{
  //...
  public Hoge(/*...*/){
     //...
  }
  public int hogeMethod(){
  //....
  }
}
Huga.java
class Huga extends Hoge{
  public Huga(/*...*/){
    super(/*...*/);
    //...
  }
  public int hugaTsukaiyasuiMethod(/*...*/){
  //...
  }
}
Huga huga = new Huga(/*...*/);
int a = huga.hogeMethod();
int b = huga.hugaTsukaiyasuiMethod();

中身なんてなんでもいいんですが、普通の、というよりはせめてコンストラクタのあるクラスって継承で簡単に機能が拡張できますよね。

Builder しかマトモにインスタンスを生成する方法が無い!!

コンストラクタすら存在せずBuilderしか提供されていないと、ラッパーとか作りたい時にこうなっちゃいますよね

Huga.java
class Huga {
  private Hoge hoge;
  public Huga(/*...*/){
    hoge = HogeBuilder.builder()/*...*/.biuld();
    //...
  }
  public int hugaTsukaiyasuiMethod(/*...*/){
  //...
  }
}
Huga huga = new Huga(/*...*/);
int a = huga.hogeMethod(); // ← できない!!!!!!!!
int b = huga.hugaTsukaiyasuiMethod();

ラッパーなんだからそもそも Hoge のメソッドにアクセスする必要のあるものが存在するのがおかしいのか、それでも直接中のメソッド叩いた方がいい時なんていくらでもある訳で、かといって Hoge のメソッドのラッパー全部作る訳にはいかないし、 getHoge() みたいなアクセサつくるのがいちばんいいのかなぁ。

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