home wiki.fukuchiharuki.me
Menu

* キーワード [#d334aeba]
- コンストラクタ
- staticメソッド
- シングルトン

* 何か [#hc66852d]

 自前工場

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

* なぜか [#d625d35b]

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

- 名前(メソッド名)をつけられる

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

- シングルトンを強制する

* どのように [#m7534f34]

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

 Setting {
 
   private singleton = null;
 
   // デフォルトコンストラクタを使用させない
   private Setting() {}
 
   static get() {
     return (singleton == null)? (this.singleton = new Setting()): this.singleton;
   }
 
 }

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

* 関連 [#k0743ccc]
- [[設計パターン/完全コンストラクタ]]
- [[設計パターン/ファクトリ]]
- [[設計パターン/ビルダー]]

* 参考 [#n574bedc]
- [[コンストラクタの代わりにstaticファクトリーメソッドを検討する - Strategic Choice>http://d.hatena.ne.jp/asakichy/20110921/1316565409]]