2010年3月28日日曜日

Effective javaまとめ1 staticファクトリメソッド2

Effective java P5~P9
項目1 コンストラクタの代わりにstaticファクトリーメソッドの提供を検討する

----->前回からの続き
staticファクトリーメソッドのメリット

3:戻り値型を定義することができる
つまり、戻り値型のサブタイプのオブジェクトを返すことが可能である。
これは、以下の特徴を持つ。
●staticファクトリーメソッドが作成された段階で、実際に返すクラスが未作成でも問題が無い
(戻り値型のサブクラスや実装クラスをあとで作成し、切り替えることが可能)
●受け取ったパラメータに応じて、別々のクラスのインスタンスを返すことが可能
●返すインスタンスのクラスをpublicにする必要がない
(親クラス、またはIFがpublicであれば、返すクラス自身はprivateで問題が無い)
→java.util.Collectionsクラスがこれを実践している

メリットを挙げてきたが、デメリットは以下の通り。
1.隠蔽されたクラスや、privteなコンストラクタしか持たないクラスは、拡張することができない
これはコンポジションを使うことで回避可能

2.他のstaticメソッドと区別がつきにくい
コンストラクタはAPIドキュメンテーションにおいて目立が、staticファクトリーメソッドは目立たないため、そのクラスのインスタンス化方法を知ることが困難になる場合がある。
これは、一般的な命名規則に基づいてメソッド名をつけることで軽減できる。
(valueOf、 geInstanceなど)

最後に、staticファクトリーメソッドを使う強い理由がない場合、コンストラクタを提供するべき。
なぜなら、それが通常の方法だから。

---> おわり

0 件のコメント:

コメントを投稿