キーワード

何か

自前工場

そのクラスのインスタンスを生成するstaticなメソッドを設けます。

なぜか

オーバーロードして複数のコンストラクタを設ければ生成について複数の手段を提供することができます。しかしコンストラクタには名前をつけることができません。生成する側がコンストラクタの引数の違いだけでそれぞれのコンストラクタの意図を読み取るのは困難です。そこでインスタンスの生成をstaticなメソッドの機能にすることでメソッド名として意図を表現することができます。

また、シングルトンを実装するのにも便利です。コンストラクタの使用を許すということはインスタンスの生成が自由であるということです。このことはシングルトンにしたいそのクラスにとっては不都合です。そこでコンストラクタをprivateにしてstaticなメソッドが代役をすることでインスタンスがシングルトンであることを強制することができます。

どのように

たとえば、アプリケーションの設定を表現するオブジェクトをシングルトンにするケース。

Setting {

  private singleton = null;

  // デフォルトコンストラクタを使用させない
  private Setting() {}

  static get() {
    return (singleton == null)? (this.singleton = new Setting()): this.singleton;
  }

}

メソッド名はそれがコンストラクタの代用であると分かるようにした方がよいです。

関連

参考

Last-modified: 2014-05-26 (月) 13:09:49 (1945d)