Java学習の道:設計モードの単例モード

4047 ワード

一、定義
1つのクラスには1つのインスタンスがあり、独自にインスタンス化されてシステム全体に提供されます.
二、シーンの適用
  • オブジェクトの作成にはリソースがかかりすぎますが、このクラスのオブジェクトも必要です.
  • は、システム内のリソースに対して、読み取り構成情報などの統一的な読み取りと書き込みを要求する.
  • 複数のインスタンスに番号生成器などのプログラム論理エラーが発生する可能性がある場合.

  • 三、設計のポイント
  • クラスには1つのインスタンスしかありません.
  • は、インスタンスを独自に作成する必要があります.
  • は、この例をシステム全体に独自に提供しなければならない.

  • 四、実現方式
  • は、プライベートな構造方法のみを提供する.
  • は、クラスの静的プライベートオブジェクトを含む.
  • は、静的プライベートオブジェクトを作成、取得するための静的パブリックメソッドを提供する.

  • 餓漢式
    オブジェクトを宣言しながら、直接初期化します.(空間で時間を変える)
    public class Singleton1 {
    	
    	//        
    	private Singleton1() {
    		
    	}
    	
    	//             
    	private static Singleton1 singleton1 = new Singleton1();
    	
    	//                 
    	public static Singleton1 getSingleton1() {
    		return singleton1;
    	}
    }
    

    怠け者風
    オブジェクトを宣言しながら初期化は行われず、呼び出されるまで初期化されません.(時間でスペースを変える)
    public class Singleton2 {
    	//        
    	private Singleton2() {
    		
    	}
    	
    	//             
    	private static Singleton2 singleton = null;
    	
    	//                 
    	public static Singleton2 getSingleton1() {
    		if (singleton == null)
    			singleton = new Singleton2();
    		
    		return singleton;
    	}
    }
    

    餓漢式
    怠け者風
    スペースで時間を入れ替える
    時間で空間を変える
    スレッドのセキュリティ
    スレッドのリスク
    五、長所と短所
  • の利点:
  • メモリにはオブジェクトが1つしかなく、メモリ容量を節約します.
  • 廃棄オブジェクトの頻繁な作成を回避し、パフォーマンスを向上させます.
  • 共有リソースの多重占有を回避します.

  • 欠点:
  • の拡張は困難です.
  • インスタンス化されたオブジェクトが長期にわたって使用されない場合、システムはデフォルトでゴミとして回収され、オブジェクトの状態が失われます.