Java でシングルトン設計パターンを実装する効率的な方法は何ですか?
ベストアンサー1
列挙型を使用します:
public enum Foo {
INSTANCE;
}
ジョシュア・ブロックはこのアプローチを効果的なJavaの再読み込みGoogle I/O 2008 での講演:ビデオへのリンクプレゼンテーションのスライド30~32もご覧ください(有効なJavaの再ロード.pdf):
シリアル化可能なシングルトンを実装する正しい方法
public enum Elvis { INSTANCE; private final String[] favoriteSongs = { "Hound Dog", "Heartbreak Hotel" }; public void printFavorites() { System.out.println(Arrays.toString(favoriteSongs)); } }
編集:「Effective Java」のオンライン部分言う:
「このアプローチは、より簡潔で、シリアル化機構を無料で提供し、高度なシリアル化攻撃やリフレクション攻撃に直面しても、複数のインスタンス化に対して強固な保証を提供することを除けば、機能的にはパブリック フィールド アプローチと同じです。このアプローチはまだ広く採用されていませんが、単一要素の列挙型はシングルトンを実装する最良の方法です。」