単例モード事例操作は列挙タイプ単例モードが一番好きです


JAVAの中で単例モードは1種のよくある設計モードで、単例モードは5種類に分けます:怠け者、悪漢、二重検査ロック、列挙と静的内部類の5種類.単例モードには特徴があります.1、単例クラスには1つのインスタンスしかありません.2、単一のインスタンスクラスは自分で自分の唯一のインスタンスを作成しなければならない.3、単一のクラスは、他のすべてのオブジェクトにこのインスタンスを提供する必要があります.単一のインスタンス・モードは、クラスに1つのインスタンスしかなく、独自にインスタンス化され、システム全体にこのインスタンスが提供されることを保証します.コンピュータシステムでは、スレッドプール、キャッシュ、ログオブジェクト、ダイアログボックス、プリンタ、グラフィックスカードのドライバオブジェクトが単一の例として設計されることが多い.これらのアプリケーションは、リソースマネージャの機能を多かれ少なかれ備えています.各コンピュータには複数のプリンタがありますが、2つの印刷ジョブが同時にプリンタに出力されないように、Printer Spoolerは1つしかありません.各コンピュータにはいくつかの通信ポートがあり、システムは、1つの通信ポートが同時に2つの要求によって同時に呼び出されないように、これらの通信ポートを集中的に管理しなければならない.要するに、単例モデルを選んだのは、不一致状態を避け、政出多頭を避けるためだ.
例を見てみましょう.ある例は種類の変種です.
package com.gd.singleton;
/**
 *     
 * @author zlm
 *
 */
public class SingletonOne {
public static void main(String[] args) {
//SingletonSix.class.newInstance();
 SingletonSix.INSTANCE.equals(SingletonSix.TEST);
 System.out.println(SingletonSix.INSTANCE.hashCode());
 System.out.println("----------------");
 System.out.println(SingletonSix.TEST.hashCode());
}
}
//     
class Singleton{
private static Singleton instance;
private Singleton(){
}
public static Singleton getInstance(){
    if(instance == null){
      instance =  new Singleton();
      }
      return instance;
}
}
class SingletonTwo{
private static SingletonTwo instance;
private SingletonTwo(){}
public static synchronized SingletonTwo getInstance(){
if(instance == null){
instance = new SingletonTwo();
}
return instance;
}
}
class SingletonThree{
private static SingletonThree instance = new SingletonThree();
private SingletonThree(){}
public static SingletonThree getInstance(){
return instance;
}
}
class SingletonFour{
private static SingletonFour instance = null;
static{
instance = new SingletonFour();
}
private SingletonFour(){}
public static SingletonFour getInstance(){
return instance;
}
}
class SingletonFive{
private static class SingletonHolder{
private static final SingletonFive INSTANCE = new SingletonFive();
}
private SingletonFive(){}
public static final SingletonFive getInstance(){
return SingletonHolder.INSTANCE;
}
}
enum SingletonSix{
INSTANCE,TEST;
public  void getSinglet(){
System.out.println("        !!!!!");
}
}
class SingletonSeven{
private volatile static SingletonSeven instance;
    private SingletonSeven(){}
    public static SingletonSeven getInstance(){
    if(instance == null){
    synchronized(SingletonSeven.class){
    if(instance == null){
    instance = new SingletonSeven();
    }
    }
    }
    return instance;
    }
}
//class SingletonEight{
//private static  SingletonEight instance;
//private SingletonEight(){}
//
//}