Singletonとスタティックの違い
1つしかないものを表現するときSingletonでもスタティックなフィールドとして表現するのも同じ気がする。なにが違うのか調べてみた。
継承の可否
- スタティックなものは継承できない。
- Singletonは継承できる。
継承できる方が将来の拡張性が高い。
保証/強制の有無
- スタティックフィールドでは2つ目が作られないことを保証/強制することはできない。
- 1つしか作成できないことを保証/強制するのがSingleton。2つ目を作成しようとするとエラーがでる。
不変
オブジェクトの状態が更新されるようなクラスはSingletonにしない。更新するときにマルチスレッド環境ではsynchronizedが必要になり性能が劣化してしまうから。リソースが単一で不変なオブジェクトに対してのみSingletonを検討する。
これはSingletonとスタティックの差というよりSingletonの注意点か?
Singletonは「システムに1つしかないことを保証するもの」。Staticは「クラスに1つしかないもの」。粒度が違うから目的も異なる。