(GOF 23デザインモード)単一モード_ダブルチェックロック_静的内部クラス_列挙式
2057 ワード
デザインモード
a、作成型モード
単例モード、工場モード、抽象工場モード、建設者モード、プロトタイプモード
b、構造型モード
アダプタモード、ブリッジモード、装飾モード、コンビネーションモード、外観モード、メタモード、エージェントモード
c、行動型モード
テンプレートメソッドモード、コマンドモード、反復器モード、オブザーバモード、仲介者モード、メモモード、解釈器モード、ステータスモード、ポリシーモード、職責チェーンモード、アクセス者モード
1.1、単例モードの二重検出ロック実現
このモードでは、同期コンテンツの内容をif内部に下げることで、実行の効率が向上し、オブジェクトを取得するたびに同期する必要がなくなり、同期が作成されたのは初めてで、以降は必要ありません.
問題:コンパイラの最適化の原因とJVMの下部の内部モデルの原因のため、たまに問題が発生して、使うことを提案しません
1.2、単例モードの静的内部類の実現(一種の怠け者式実現)
要点:外部クラスにstatic属性がなければ、餓漢式のようにすぐにオブジェクトをロードすることはできません.getInstance()が実際に呼び出されている場合にのみ、静的内部クラスがロードされます.クラスをロードするときはスレッドが安全です.Instanceはstatic finalタイプで、メモリにこのようなインスタンスが1つしか存在しないことを保証し、1回しか値を付与できないことを保証し、スレッドのセキュリティを保護し、同時効率的な呼び出しと遅延ロードの優位性を兼ね備えています.
SingletonDemo04.java
1.3、単例モードの列挙実現
利点:単純な列挙を実現すること自体が単例モードである.JVMによって根本的に保障されています!反射と逆シーケンス化による脆弱性を回避!呼び出し効率が高い!
欠点:遅延負荷なし(怠惰負荷なし)
SingletonDemo05.java
どのように選択しますか?
単一例のオブジェクトはリソースの占有量が少なく,遅延負荷を必要としない列挙式が餓漢式より優れている(呼び出し効率が高く,遅延負荷ができない)
単一のオブジェクトはリソースを占有し、静的内部クラス式(呼び出し効率が高く、遅延ロード可能)を遅延ロードする必要があります.怠け者式(呼び出し効率が高くなく、遅延ロード可能)よりも優れています.
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() {
}
}
どのように選択しますか?
単一例のオブジェクトはリソースの占有量が少なく,遅延負荷を必要としない列挙式が餓漢式より優れている(呼び出し効率が高く,遅延負荷ができない)
単一のオブジェクトはリソースを占有し、静的内部クラス式(呼び出し効率が高く、遅延ロード可能)を遅延ロードする必要があります.怠け者式(呼び出し効率が高くなく、遅延ロード可能)よりも優れています.