オブジェクトの作成と破棄 - プライベートコンストラクタまたは列挙型でシングルトン特性を強化します

参考: "効果的なJavaの"、 "Javaのコア技術第1巻"、https://www.cnblogs.com/zhaosq/p/10135362.html

レビューに基づいて、

1.列挙は何ですか?

時には、このような洋服のサイズなどの限られたセット内の変数の値は、あなたが列挙を使用することができます。

// カスタム列挙型
列挙サイズ{S、M、L、X-};
 //は、型サイズの変数宣言 
サイズサイズ= Size.M

ちょうど列挙型変数は、上記サイズとして指定された列挙変数は、唯一のS、M、L、X.ことができる記憶します

実際には、クラスの同じレベルの列挙が、完全にクラスとしてできません。

そして、クラス区分は、次のとおりです。

1.クラスのキーワードが列挙型列挙、クラスです

2.方法のクラスは、ローカルクラス内即ち、内部であってもよいです。列挙が、メソッド内で、メソッドは、クラスまたはクラス内外のみ外部宣言できません。


同じポイントはあなたにも列挙型の中にいくつかのコンストラクタ、メソッド、およびこれを書くことができるということです

 

2.シングルトンとは何ですか

シングルトンは、シングルトンであるインスタンスを1つだけ持つことができたクラスを指します。たとえば、私たちは多くの場合、Windowsシステムを使用して、あなたはシステムの変更機能でアイコンをクリック、またはコンピュータのでゴミよりも、それは常に一つのウィンドウのみでどのように多くのクリックに関係なくは、実際には、これはSingletonパターンの現れです。

次の2つのステップを経て例シングルモード:

1.クラスのコンストラクタの民営化は、他のクラスは、オブジェクトクラスのインスタンスで構成することができないように、クラスによって得られたクラスの単一のインスタンスは、静的な方法を提供します。

2.次に、この静的メソッドを提供することは、判断が必要となる参照が空でない場合、クラスは、クラスのインスタンスを作成するためのクラス参照が空で、指定した参照を維持するために、クラスのインスタンスへの参照残る場合は、この参照は、返される開催しました。

コードは以下の通りであります:

パブリック クラスEJ01_03 {
     //このプライベートコンストラクタは、静的最終フィールドインスタンスの、例えば、一度だけ呼び出される
    プライベート 静的は 最終 EJ01_03 INSTANCE = 新しい新しいEJ01_03();
     // 民営化コンストラクタは、そうこのクラスのインスタンスではない
    民間のEJ01_03(){};
     // 外部は、このクラスのインスタンスを取得するために、このメソッドを呼び出すことができ、これは、同じ方法でのインスタンスを返している
    パブリック 静的EJ01_03のgetInstance(){
         戻りインスタンスを、
    }
}

 これが唯一のクラスコードでオブジェクトをインスタンス化EJ01_03を得ることができます。getInstanceへのすべての呼び出しは、同じオブジェクトへの参照を返します。

EJ01_03 ej3 = EJ01_03.getInstance()。

 

例単一の列挙

列挙シングルトンを実装する前に、列挙でのより詳細な外観を必要としています。

次のように列挙が定義されます:

列挙サイズ{S、M、L、X}。

しかし、コンパイラの後で、上記のコードは、次の主要な要素、サイズクラスにコンパイルされています。

クラスサイズ{
     パブリック 静的 最終サイズS。
    公共の 静的な 最終サイズM;
    公共の 静的な 最終サイズL;
    公共の 静的な 最終サイズX;

    // インスタンス化
    静的{
        S = サイズ();
        Mは = 新しいサイズを();
        L = 新しいサイズ();
        X = 新しいサイズ();
    }
}

上記のコード、S、M、Lから分かるように、Xは実際のstatic finalフィールドです。

シングルトンパターンが正確に達成のstatic finalフィールドを必要としています。シングルトンコードは、以下の列挙によって達成されます。

クラスEnumSingleton {}

列挙シングルトン{
    INSTANCE;
  // シングルトンオブジェクトはEnumSingletonあるので、変数を宣言するEnumSinletonの必要性。
    プライベートEnumSingletonインスタンス;
     // コンストラクタ列挙デフォルトのプライベートなので、ノープラスプライベート
    シングルトン(){
        インスタンス = 新しいEnumSingleton()。
    }
    公共EnumSingletonのgetInstance(){
         戻りインスタンス。
    }
}
// すべてそのインスタンスは下記、列挙されたコンストラクタを呼び出しますが、実際の事例では、唯一の新しいシングルトンです()。これは、()のgetInstanceインスタンスによって呼び出すことができる 
EnumSingleton enumSingleton2 Singleton.INSTANCE.getInstance =();

 

Javaでは、それぞれの列挙がユニークです。列挙シングルトンの方法は、通常の方法と似ていますが、無料の直列化メカニズムを提供しますが、絶対的にも、洗練された直列化または反射攻撃に直面して、インスタンスの数を防ぎます。

 

 

 

おすすめ

転載: www.cnblogs.com/lbhym/p/11797752.html