(GOF 23デザインモード)単一モード_ダブルチェックロック_静的内部クラス_列挙式

2057 ワード

デザインモード
a、作成型モード
単例モード、工場モード、抽象工場モード、建設者モード、プロトタイプモード
b、構造型モード
アダプタモード、ブリッジモード、装飾モード、コンビネーションモード、外観モード、メタモード、エージェントモード
c、行動型モード
テンプレートメソッドモード、コマンドモード、反復器モード、オブザーバモード、仲介者モード、メモモード、解釈器モード、ステータスモード、ポリシーモード、職責チェーンモード、アクセス者モード
1.1、単例モードの二重検出ロック実現
このモードでは、同期コンテンツの内容をif内部に下げることで、実行の効率が向上し、オブジェクトを取得するたびに同期する必要がなくなり、同期が作成されたのは初めてで、以降は必要ありません.
問題:コンパイラの最適化の原因とJVMの下部の内部モデルの原因のため、たまに問題が発生して、使うことを提案しません
1.2、単例モードの静的内部類の実現(一種の怠け者式実現)
要点:外部クラスにstatic属性がなければ、餓漢式のようにすぐにオブジェクトをロードすることはできません.getInstance()が実際に呼び出されている場合にのみ、静的内部クラスがロードされます.クラスをロードするときはスレッドが安全です.Instanceはstatic finalタイプで、メモリにこのようなインスタンスが1つしか存在しないことを保証し、1回しか値を付与できないことを保証し、スレッドのセキュリティを保護し、同時効率的な呼び出しと遅延ロードの優位性を兼ね備えています.
SingletonDemo04.java
package junit.matrix.pattern.singleton;

/**
 *               
 *     :    ,     ,         !
 * 
 * SingletonDemo02<BR>
 *    :Matrix <BR>
 *   :2016 2 23 -  5:40:58 <BR>
 * 
 * @version 1.0.0
 *
 */
public class SingletonDemo04 {

    //      
    private static class SingletonClassInstance {
        private static SingletonDemo04 instance = new SingletonDemo04();
    }

    //       
    private SingletonDemo04() {

    }

    //       ,     !
    public static SingletonDemo04 getInstance() {
        return SingletonClassInstance.instance;
    }
}

1.3、単例モードの列挙実現
利点:単純な列挙を実現すること自体が単例モードである.JVMによって根本的に保障されています!反射と逆シーケンス化による脆弱性を回避!呼び出し効率が高い!
欠点:遅延負荷なし(怠惰負荷なし)
SingletonDemo05.java
package junit.matrix.pattern.singleton;

/**
 *            
 * 
 * SingletonDemo02<BR>
 *    :Matrix <BR>
 *   :2016 2 23 -  5:40:58 <BR>
 * 
 * @version 1.0.0
 *
 */
public enum SingletonDemo05 {

    // enum        

    //         ,              !
    INSTANCE;

    //          
    public void signletonOperation() {
    }
}

どのように選択しますか?
単一例のオブジェクトはリソースの占有量が少なく,遅延負荷を必要としない列挙式が餓漢式より優れている(呼び出し効率が高く,遅延負荷ができない)
単一のオブジェクトはリソースを占有し、静的内部クラス式(呼び出し効率が高く、遅延ロード可能)を遅延ロードする必要があります.怠け者式(呼び出し効率が高くなく、遅延ロード可能)よりも優れています.