カリキュラムデザインパターンデザインパターン簡潔8-6シングルトンデザインパターン - 破壊のシングルトンの原則と分析ソリューションのシーケンス

分析の1つの原則

2コードのチュートリアル

2.1原理解決

2.2ソリューション

 

 

分析の1つの原則

2コードのチュートリアル

2.1原理解決

テストカテゴリ:

パッケージcom.geely.design.pattern.creational.singleton。

輸入 java.io. * ; 

パブリック クラスのテスト{ 

    / * パブリック静的無効メイン(文字列[] args){ 
        //这样写异常、因为构造方法私有
// LazySingleton lazySingleton =新しいLazySingleton()。
       LazySingleton lazySingleton = LazySingleton.getInstance()。
       System.out.println(lazySingleton)。
    } * / 

/ *     パブリック静的無効メイン(文字列[] args){ 
        スレッドスレッド1 =新しいスレッド(新しいT())。
        スレッドスレッド2 =新しいスレッド(新しいT()); 
        thread1.start(); 
        thread2.start(); 
        System.out.println( "结束了の!!!");
    } * / 

    / **
     *シリアライゼーションコードチュートリアル
     * HungrySingletonオブジェクトファイルに、そのファイルからオブジェクト、または同じオブジェクトを読み取りますか?
     *実際:等号リードノートに格納されているファイル(ハッシュコードを比較等しい)から
     * @paramの引数
      * / 
    パブリック 静的 ボイドメイン(文字列[]引数){
         試み{
             // シングルトンオブジェクト出力ストリームに書き込まれ 
            HangrySingletonインスタンス= HangrySingleton.getInstance(); 
            ObjectOutputStreamのOOS = 新しい新しい ObjectOutputStreamの(新しい新たFileOutputStream(「singleton_file」)); 
            oos.writeObject(インスタンス); 

            // オブジェクトに入力ストリームから読み込みます
            ファイルのファイル= 新新ファイル( "singleton_file" ); 
            ObjectInputStreamのOIS = 新しい ObjectInputStreamの(新しいFileInputStreamを(ファイル)); 
            HangrySingleton instance2で = (HangrySingleton)ois.readObject();
            System.out.println(インスタンス)。
            System.out.println(instance2で)。
            System.out.println(例えば == instance2で)。
        } キャッチ(IOExceptionを電子){ 
            e.printStackTrace(); 
        } キャッチ(ClassNotFoundExceptionが電子){ 
            e.printStackTrace(); 
        }
    } 

}

 

エンティティクラス:

以下のためのパッケージ変更com.geely.design.pattern.creational.singleton; 



パブリック クラスHangrySingleton { 


    / ** 
     *プライベート定数、クラスがアップ割り当てられていたときに初期化を宣言。一度だけロードされた空腹の中国風のクラスの初期化。
     *これは、マルチスレッドの問題は存在しません。
     * / 
    プライベート 最終 静的hangrySingleton HangrySingleton、

    静的{ 
        hangrySingleton = 新しい新しいHangrySingleton(); 
    } 

    / ** 
     *宣言プライベートコンストラクタ
     * / 
    プライベートHangrySingleton(){ 

    } 

   

    / ** 
     *オブジェクト取得する外部インターフェース提供
     * @return 
     * / 
    公開 静的HangrySingletonのgetInstance(){
        返すhangrySingletonを。
    } 
}

 

印刷ログ:

"C:\プログラムファイル\のJava \ jdk1.7.0_79 \ビン\ののjava.exe"「-javaagent:D:\ Javaの\ devolopKitの\アイデア\ anZh \のIntelliJ IDEA Community Editionを2018年1月4日のlib \ \ idea_rt.jar = 22216 :D:\ Javaの\のdevolopKitの\アイデア\ anZhのIntelliJ IDEA Community Editionの\ binに2018年1月4日\ "の-Dfile.encoding = UTF-8 -classpath" C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ charsets.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ deploy.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ extに\アクセス・ブリッジ-64。瓶; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ extに\ dnsns.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ extに\ jaccess.jar; C: \プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ extに\ localedata.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ extに\ sunec.jar; C:\プログラムファイル\ Javaの\ jdk1.7.0_79 \ JRE \ libに\ extに\ sunjce_provider.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ extに\ sunmscapi.jar; C:\プログラムファイル\のJava \ jdk1。 7。0_79 \ JRE \ libに\ extに\ zipfs.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ javaws.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ jce.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ jfr.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ jfxrt.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\のjsse.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\管理-agent.jar; C:\プログラムファイル\のJava \ jdk1。 7.0_79 \ JRE \ libに\ plugin.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ resources.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ RT .jar; F:\ xiangmu3 \新\アイデア\ design_patternの\ターゲット\クラス」0_79 \ JRE \ libに\管理-agent.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ plugin.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ resources.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ rt.jarの; F:\ xiangmu3 \新\アイデア\ design_pattern \ターゲット\クラス」0_79 \ JRE \ libに\管理-agent.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ plugin.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ resources.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ rt.jarの; F:\ xiangmu3 \新\アイデア\ design_pattern \ターゲット\クラス」com.geely.design.pattern.creational.singleton.Test
 java.io.NotSerializableException:com.geely.design.pattern.creational.singleton.HangrySingleton 
    java.io.ObjectOutputStream.writeObject0で(ObjectOutputStream.java: 1183 
    のjavaで。 io.ObjectOutputStream.writeObject(ObjectOutputStream.java: 347 
    com.geely.design.pattern.creational.singleton.Test.mainで(Test.java: 33 )、

終了コードで終了プロセス 0

 

 

2.2ソリューション

テストカテゴリ:

パッケージcom.geely.design.pattern.creational.singleton。

輸入 java.io. * ; 

パブリック クラスのテスト{ 

    / * パブリック静的無効メイン(文字列[] args){ 
        //这样写异常、因为构造方法私有
// LazySingleton lazySingleton =新しいLazySingleton()。
       LazySingleton lazySingleton = LazySingleton.getInstance()。
       System.out.println(lazySingleton)。
    } * / 

/ *     パブリック静的無効メイン(文字列[] args){ 
        スレッドスレッド1 =新しいスレッド(新しいT())。
        スレッドスレッド2 =新しいスレッド(新しいT()); 
        thread1.start(); 
        thread2.start(); 
        System.out.println( "结束了の!!!");
    } * / 

    / ** 
     *シリアライゼーションコードチュートリアル
     * HungrySingletonオブジェクトファイルに、そのファイルからオブジェクト、または同じオブジェクトを読み取りますか?
     *実際:等号リードノートに格納されているファイル(ハッシュコードを比較等しい)から
     * @paramの引数
      * / 
    パブリック 静的 ボイドメイン(文字列[]引数){
         試み{
             // シングルトンオブジェクト出力ストリームに書き込まれ 
            HangrySingletonインスタンス= HangrySingleton.getInstance(); 
            ObjectOutputStreamのOOS = 新しい新しい ObjectOutputStreamの(新しい新たFileOutputStream(「singleton_file」)); 
            oos.writeObject(インスタンス); 

            // オブジェクトに入力ストリームから読み込みます
            ファイルファイル= 新しいファイル( "singleton_file" ); 
            ObjectInputStreamのOIS = 新しい ObjectInputStreamの(新しいFileInputStreamを(ファイル)); 
            HangrySingleton instance2で = (HangrySingleton)ois.readObject(); 
            System.out.println(インスタンス)。
            System.out.println(instance2で)。
            System.out.println(例えば == instance2で)。
        } キャッチ(IOExceptionを電子){ 
            e.printStackTrace(); 
        } キャッチ(ClassNotFoundExceptionが電子){ 
            e.printStackTrace(); 
        }
    } 

}

 

エンティティクラス:

以下のためのパッケージ変更com.geely.design.pattern.creational.singleton、

インポートしたjava.io.Serializable; 

パブリック クラス HangrySingleton 実装はシリアライズ { 


    / ** 
     *プライベート定数を宣言し、クラスがアップ割り当てられていたときに初期化。一度だけロードされた空腹の中国風のクラスの初期化。
     *これは、マルチスレッドの問題は存在しません。
     * / 
    プライベート 最終 静的HangrySingleton hangrySingleton、

    静的{ 
        hangrySingleton = 新しい新しいHangrySingleton(); 
    } 

    / ** 
     *プライベートコンストラクタを宣言
     * / 
    プライベートHangrySingleton(){ 

    } 

    / ** 
     * 
     * /
    オブジェクトはreadResolveプライベート(){ 
        hangrySingletonを返す; 
    }

     / ** 
     *オブジェクトを取得するための外部インタフェースを提供
     * @return 
     * / 
    パブリック 静的HangrySingletonのgetInstance(){
         戻りhangrySingletonを; 
    } 
}

 

印刷ログ:

"C:\プログラムファイル\のJava \ jdk1.7.0_79 \ビン\ののjava.exe"「-javaagent:D:\ Javaの\ devolopKitの\アイデア\ anZh \のIntelliJ IDEA Community Editionを2018年1月4日のlib \ \ idea_rt.jar = 22084 :D:\ Javaの\のdevolopKitの\アイデア\ anZhのIntelliJ IDEA Community Editionの\ binに2018年1月4日\ "の-Dfile.encoding = UTF-8 -classpath" C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ charsets.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ deploy.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ extに\アクセス・ブリッジ-64。瓶; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ extに\ dnsns.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ extに\ jaccess.jar; C: \プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ extに\ localedata.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ extに\ sunec.jar; C:\プログラムファイル\ Javaの\ jdk1.7.0_79 \ JRE \ libに\ extに\ sunjce_provider.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ extに\ sunmscapi.jar; C:\プログラムファイル\のJava \ jdk1。 7。0_79 \ JRE \ libに\ extに\ zipfs.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ javaws.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ jce.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ jfr.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ jfxrt.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\のjsse.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\管理-agent.jar; C:\プログラムファイル\のJava \ jdk1。 7.0_79 \ JRE \ libに\ plugin.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ resources.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ RT .jar; F:\ xiangmu3 \新\アイデア\ design_patternの\ターゲット\クラス」0_79 \ JRE \ libに\管理-agent.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ plugin.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ resources.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ rt.jarの; F:\ xiangmu3 \新\アイデア\ design_pattern \ターゲット\クラス」0_79 \ JRE \ libに\管理-agent.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ plugin.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ resources.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ rt.jarの; F:\ xiangmu3 \新\アイデア\ design_pattern \ターゲット\クラス」com.geely.design.pattern.creational.singleton.Test 
com.geely.design.pattern.creational.singleton.HangrySingleton@5c67aece 
com.geely.design.pattern.creational.singleton.HangrySingleton@5c67aece 


プロセスは終了コードで終了 0

 

おすすめ

転載: www.cnblogs.com/1446358788-qq/p/11374488.html