1。モードはじめに
パターンの定義
特定のクラスには1つのインスタンスしかないことを確認し、それ自体をインスタンス化し、このインスタンスをシステム全体に提供します。
モードの使用シナリオ
クラスには1つのオブジェクトのみがあることを確認してください。たとえば、オブジェクトを作成するには、IOやデータベースなどのリソースへのアクセスなど、あまりにも多くのリソースが必要です。
2。UMLクラス図
キャラクターの紹介:
(1)クライアント:高レベルのクライアント。
(2)シングルトン:シングルトン。
3。パターンの簡単な実装
パブリッククラスのシングルトン{プライベート静的シングルトンイントナンス; private singleton(){} public static singleton getInstance(){ / * *最初に、複数のスレッドが入るとロックに遭遇し、1つのスレッドが入ります。これは空の新しいオブジェクトです。後続のスレッドが空ではなく、操作なしで入ります。最後に直接返す *オブジェクトは空でなく、複数のスレッドが空ではなく機能に入り、ロック操作が実行されず、直接戻ります */ if(intance == null){synchronized(singleton.class){if(intance == null){intance = new singleton(); }} return intance; }} class singleton1 {// lazy private static singleton1 intance = new singleton1(); // lazy、それはprivate singleton1(){} public static singleton1 getInstance(){return intance; }} class singleton2 {//空腹のプライベート静的Singleton2 intance; private singleton2(){} public static singleton2 getInstance(){// loads if(intance == null){intance = new singleton2(); } return intance; }} class singleton3 {// private static singleton3 intance; private singleton3(){} public synchronized static singleton3 getInstance(){//使用するとロックすると、ロックマルチスレッドコールにはロックアクションがあります(intance == null){intance = new Singleton3(); } return intance; }} class singleton4 {// private static singleton4 intance; private singleton4(){} public static singleton4 getInstance(){// collapse synchronized(singleton4.class){//ロック効率は3(intance == null){intance = new singleton4(); }} return intance; }}4。長所と短所
(1)利点:
A.シングルトンモードにはメモリに1つのインスタンスしかないため、特にオブジェクトを頻繁に作成して破壊する必要があり、作成や破壊中にパフォーマンスを最適化できない場合、メモリ支出が削減されます。シングルトンモードの利点は非常に明白です。
B.シングルトンパターンは1つのインスタンスのみを生成するため、システムのパフォーマンスオーバーヘッドが減少します。オブジェクトの生成に、構成の読み取りや他の依存オブジェクトの生成など、多くのリソースが必要な場合、アプリケーションが起動してからメモリに永続的に存在するときに、シングルトンオブジェクトを直接生成することで解決できます。
C. Singletonモードは、1つのインスタンスのみがメモリにあるため、同じリソースファイルでの同時書き込み操作を避けているため、書き込みファイルアクションなど、複数のリソースの職業を回避できます。
D.シングルトンモードは、システム内のグローバルアクセスポイントを設定し、リソースアクセスを最適化および共有できます。たとえば、Singletonクラスは、すべてのデータテーブルのマッピングと処理に責任を負うように設計できます。
(2)短所
A.シングルトンモードには一般的にインターフェイスがなく、拡張することは困難です。拡張したい場合は、コードを変更する以外に実装する2番目の方法はありません。