一度私に言った、「あなたがプログラムを書いたの?」私は少しうなずくと、彼は言った、「書いた、......私はあなたのテストをテストします。シングルトンが、書かれている?」私は物乞い、と思いました同じ人が、また、テスト私と?あなたの顔を回しもはや無視しない移動します。クンは、長い時間を待っていた、非常に真剣に」、言っ打つ書き込むことはできません?......私が覚えて、あなたを教えて!
シングルトン(Singletonパターン)
JavaでSingletonパターンは、最も簡単なデザインパターンの一つです。このモデルは、単一のオブジェクトが作成されていることを保証しながら、独自のオブジェクトを作成するための責任がある単一のクラスが含まれます。このクラスは、直接アクセスできるオブジェクト、オブジェクトクラスのインスタンスにアクセスするための唯一の方法を提供します。
シングルトン三つの要素:1.唯一のシングルトンインスタンス。2.シングルトンクラスは、独自のインスタンスを作成する必要があります。3.シングルトンクラスは、他のすべてのオブジェクトにこの例を提供しなければなりません。
シナリオ
1.ゲーム開発における主人公のカメラの視点は通常、一つだけ従うこと
セキュリティのため2.生産要件固有のシリアル番号
3.WEBカウンター、一度データベース内のすべてのリガ、先天性のキャッシュされた単一の例をリフレッシュされません
4.過度のリソースオブジェクトは、データベースなどへのI / O接続として、消費する必要性が生じ
書かれた4つのシングルトン
プレゼンテーション言語が、関係なく、スレッドの安全性の問題を、typescriptですし、最終的にはJavaScriptを達成するために、マルチスレッドjsのではなく。しかし、私はまだ、ジャワ、Cを考えたりたくないTS、これらの問題のスレッドの安全性に表示されます。
レイジーモード
クラスSingleTest { プライベート静的インスタンス:SingleTest。 コンストラクタ(){ } パブリック静的のgetInstance():SingleTest { 場合(この .instance == NULL ) この .instance = 新しいSingleTest()。 戻る この.instanceを。 } }
それは怠惰と呼ばれる所以は、最も基本的な実装ですか?あなただけのオブジェクトをインスタンス化を呼び出すために誰かを待つので、怠惰十分にあります。欠点は明白です:マルチスレッドをサポートしていません。あなたは、スレッドの安全性を確保したい場合は、私たちは効率に影響を与えるだろう、もちろん、同期ロックする必要があります。
飢えモード
クラスシングルトン{ プライベート静的インスタンス:シングルトン = 新しいシングルトン()。 コンストラクタ(){} パブリック静的のgetInstance():シングルトンは{ 返す この.instanceと、 } }
非常に一般的なパターン。なぜそれが飢えた男と呼ばれていますか?あなたはそれをインスタンス化するとき、クラスがロードされているので、他の人があなたは、Sigui生まれ変わっを終え役立たないでしょう!簡単に書くことが、効率が向上します。欠点は明白です:それはゴミオブジェクトになりやすい、メモリを無駄に、クラスがロードされるときに初期化されます。
デザインパターンのマルチスレッド言語のための次のモードでは、そうTSを示すものではありません。
二重ロック検出/ダブルチェックロック(DCL、即ち、ダブルチェックロック)
パブリック クラスシングルトン{ プライベート 揮発性の 静的シングルトンシングルトン。 プライベートシングルトン(){} パブリック 静的シングルトンgetSingleton(){ 場合(シングルトン== NULL ){ 同期(シングルトン。クラス){ 場合(シングルトン== NULL ){ シングルトン = 新しいシングルトン()。 } } } 戻りシングルトン。 } }
このように、二重ロック機構、および安全なマルチスレッドで、高い性能を維持することができます。
レジスタベース/静的な内部クラス
パブリック クラスシングルトン{ プライベート 静的 クラスSingletonHolder { プライベート 静的 最終シングルトンインスタンス= 新しいシングルトン()。 } プライベートシングルトン(){} パブリック 静的 最終シングルトンのgetInstance(){ 戻りSingletonHolder.INSTANCEと、 } }
このように、我々は、ロックモードをダブルチェックし同じ効果を得ることができますが、実装が簡単です。遅延を使用して静的フィールドの初期化は、このモードではなく、二重ロック検出モードを使用すべきです。本実施形態では、遅延は、インスタンス・フィールドを初期化するために必要なときに二重ロック検出モードを使用することができる、唯一の静的フィールドに適用されます。
数え上げます
パブリック 列挙シングルトン{ INSTANCE。 公共 ボイドwhateverMethod(){ } }
シングルモードの実施例を実現するための最良の方法。これは、絶対の複数のインスタンスを防止するために、自動サポートシリアル化メカニズムよりコンパクトです。しかし、使用前に必要とJDK1.5に列挙機能後。
クンは、2本の指カウンターをタップし、長い爪非常に元気です、彼はうなずいて言った示し、「はいはい!......シングルトンは、あなたが知っている、4つの事を書いていますか?