【デザインパターン】監督の一存〜コンストラクタの連鎖〜

前回、コンストラクタの代わりにCreation Methodを使用したインスタンス生成を行いました。しかし、new以外のインスタンス化は全体の統一性を損なうとのご意見が出されたため、別の方法を考えることにします。


共通部分をくくるという発想はよかったとのことなので、今回は「外観を全く変えない」リファクタリングを行います。


(今回も、サンプルコードは「今、最も注目を浴びている言語」Javaです。)


■Before

public class Baru {
  public Baru(){
    this.st = 10;
    this.df = 5;
    this.hp = 65535;
    this.effect = false;
  }
  
  public Baru(int hp){
    this.st = 10;
    this.df = 5;
    this.hp = hp;
    this.effect = true;
  }


実は、コンストラクタもメソッドのように分割することができます。


■After

public class Baru {
  public Baru(){
    this(10, 5, 65535, false);
  }
  
  public Baru(int hp){
    this(10, 5, hp, true);
  }

  //キャッチオールコンストラクタ
  private Baru(int st, int df, int hp, boolean effect){
    this.st = st;
    this.df = df;
    this.hp = hp;
    this.effect = effect;
  }

このように、メソッド呼び出しの要領でコンストラクタを連鎖させることができます。
このとき、全ての引数を受け取ることができるコンストラクタを作ることがポイントで、それを「キャッチオールコンストラクタ」などと呼びます。
また、今回はこれを外部から直接呼び出すことはないので、アクセス修飾子をprivateにしています。


これで監督も満足したようです。前より良くなったと胸を張っています。


監督「今後、全ての新案は私を通すように。勝手にnewすることは許さん!ハッハッハ(笑)」


◆本日のクレーム◆
「thisって何?」
「selfのことだよ」
「ああ、オブジェクトの一人称ね」


■参考
パターン指向リファクタリング入門
http://ec.nikkeibp.co.jp/item/books/P82380.html