項目3.privateのコンストラクタかenum型でシングルトン特性を強制する
はじめに
- シングルトンは一度しかインスタンスが作成されないクラス
- シングルトンにすることでテストを困難にする
実装方法
その1
コンストラクタをprivateにし、インスタンスへのアクセスを提供するためのpublic static finalなメンバーを公開する
- 長所
- クラスがシングルトンであることがAPIから明らか
- 単純である
- 短所
- リフレクションによりprivateコンストラクタを呼び出せてしまう
- シリアライズ可能にするには、Serializableを実装するだけでなく、インスタンスフィールドをtransientと宣言し、readResolveメソッドを提供しなければならない
その2
コンストラクタをprivateにし、publicなstaticファクトリメソッドを公開する
- 長所
- APIを変更せずに振る舞いこを変えることができる
- ジェネリックのシングルトンファクトリを書ける
- サプライヤとしてメソッド参照を使える
- 短所
- リフレクションによりprivateコンストラクタを呼び出せてしまう
- シリアライズ可能にするには、Serializableを実装するだけでなく、インスタンスフィールドをtransientと宣言し、readResolveメソッドを提供しなければならない
その3
単一要素を持つenumを宣言する
- 長所
- 何もしなくてもシリアライズやリフレクションへ対応できる