Singleton パターン
Singleton パターンの一般的なクラス図を示す。
このクラス図で注目すべきことは以下の3点である。
同じ型のインスタンスが private なクラス変数として定義されている。
コンストラクタの可視性が private である。
同じ型のインスタンスを返す getInstance() がクラス関数として定義されている。
クラス図内にあるアンダーラインは、その項目がクラス変数あるいはクラス関数であることを意味している。
Android環境下でアプリケーションの寿命と同等のstaticフィールドを使用したい場合、独自のandroid.app.Application派生クラスを定義してAndroidManifest.xmlに記述する。通常はApplicationのサブクラス化は必要なく、たいていのケースでは、(クラスの再初期化が起こりうることに注意してさえいれば)staticシングルトンで同等機能を提供できるとされている。
Androidは通例リソースに制限のあるモバイル環境であることもあいまって、オブジェクトのライフサイクルは比較的短く、アプリケーションのサスペンドによりクラスのアンロードが発生しやすくなる。そもそもAndroidの仮想マシンは正式なJava SE/Java ME仕様に則っていない。しかし、たとえ正式なJava SE/Jakarta EE(旧・Java EE)仕様に則ったデスクトップ環境やサーバー環境であっても、クラスのアンロードは起こりうる。
このように、SingletonパターンはJavaという言語だけで考えてはならず、実行環境によってもあり方が変わってくるので注意が必要である。Androidのようにフレームワーク内でSingletonを行いたい場合はフレームワーク提供の機構を使うことを検討しなくてはならない。Java EE 6では@Singletonアノテーションが導入されている。