Curriculum design patterns Design patterns succinctly 8-6 singleton design pattern - sequence of destruction singleton principles and analytical solutions

1 principle of analytic

2 Code Walkthrough

2.1 Principle resolved

2.2 Solution

 

 

1 principle of analytic

2 Code Walkthrough

2.1 Principle resolved

Test categories:

package com.geely.design.pattern.creational.singleton;

import java.io.*;

public class Test {

    /*public static void main(String [] args){
        //这样写异常,因为构造方法私有
//        LazySingleton lazySingleton = new LazySingleton();
       LazySingleton lazySingleton = LazySingleton.getInstance();
       System.out.println(lazySingleton);
    }*/

/*    public static void main(String [] args){
        Thread thread1 = new Thread(new T());
        Thread thread2 = new Thread(new T());
        thread1.start();
        thread2.start();
        System.out.println("结束了!!!");
    } * / 

    / ** 
     * serialization code walkthrough 
     * HungrySingleton objects in the file, and then read the object from the file, or the same object? 
     * Actual: from a file stored in the read note when a equals (equals compare the hash code) 
     * @param args
      * / 
    public  static  void main (String [] args) {
         the try {
             // the singleton object is written to the output stream 
            HangrySingleton instance = HangrySingleton.getInstance (); 
            the ObjectOutputStream OOS = new new the ObjectOutputStream ( new new a FileOutputStream ( "singleton_file" )); 
            oos.writeObject (instance); 

            // read from the input stream to the object 
            File file = new new File("singleton_file");
            ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file));
            HangrySingleton instance2 = (HangrySingleton) ois.readObject();
            System.out.println(instance);
            System.out.println(instance2);
            System.out.println(instance==instance2);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

}

 

Entity classes:

Package Penalty for com.geely.design.pattern.creational.singleton; 



public  class HangrySingleton { 


    / ** 
     * declare private constants, initialized when the class had been assigned up. Hungry Chinese-style class initialization when loaded only once. 
     * It does not exist multi-threading problems. 
     * / 
    Private  Final  static hangrySingleton HangrySingleton; 

    static { 
        hangrySingleton = new new HangrySingleton (); 
    } 

    / ** 
     * declare a private constructor 
     * / 
    Private HangrySingleton () { 

    } 

   

    / ** 
     * provide an external interface to obtain the object 
     * @return 
     * / 
    public  static HangrySingleton the getInstance () {
        return hangrySingleton;
    }
}

 

Print log:

"C:\Program Files\Java\jdk1.7.0_79\bin\java.exe" "-javaagent:D:\java\devolopKit\idea\anZh\IntelliJ IDEA Community Edition 2018.1.4\lib\idea_rt.jar=22216:D:\java\devolopKit\idea\anZh\IntelliJ IDEA Community Edition 2018.1.4\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.7.0_79\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\jce.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\jfxrt.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\resources.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\rt.jar;F:\xiangmu3\Xin\Idea\design_pattern\target\classes" com.geely.design.pattern.creational.singleton.Test
java.io.NotSerializableException: com.geely.design.pattern.creational.singleton.HangrySingleton
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1183)
    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:347)
    at com.geely.design.pattern.creational.singleton.Test.main(Test.java:33)

Process finished with exit code 0

 

 

2.2 Solution

Test categories:

package com.geely.design.pattern.creational.singleton;

import java.io.*;

public class Test {

    /*public static void main(String [] args){
        //这样写异常,因为构造方法私有
//        LazySingleton lazySingleton = new LazySingleton();
       LazySingleton lazySingleton = LazySingleton.getInstance();
       System.out.println(lazySingleton);
    }*/

/*    public static void main(String [] args){
        Thread thread1 = new Thread(new T());
        Thread thread2 = new Thread(new T());
        thread1.start();
        thread2.start();
        System.out.println("结束了!!!");
    } * / 

    / ** 
     * serialization code walkthrough 
     * HungrySingleton objects in the file, and then read the object from the file, or the same object? 
     * Actual: from a file stored in the read note when a equals (equals compare the hash code) 
     * @param args
      * / 
    public  static  void main (String [] args) {
         the try {
             // the singleton object is written to the output stream 
            HangrySingleton instance = HangrySingleton.getInstance (); 
            the ObjectOutputStream OOS = new new the ObjectOutputStream ( new new a FileOutputStream ( "singleton_file" )); 
            oos.writeObject (instance); 

            // read from the input stream to the object
            File file = new File("singleton_file");
            ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file));
            HangrySingleton instance2 = (HangrySingleton) ois.readObject();
            System.out.println(instance);
            System.out.println(instance2);
            System.out.println(instance==instance2);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

}

 

Entity classes:

Package Penalty for com.geely.design.pattern.creational.singleton; 

Import the java.io.Serializable; 

public  class HangrySingleton the implements Serializable { 


    / ** 
     * declare private constants, initialized when the class had been assigned up. Hungry Chinese-style class initialization when loaded only once. 
     * It does not exist multi-threading problems. 
     * / 
    Private  Final  static HangrySingleton hangrySingleton; 

    static { 
        hangrySingleton = new new HangrySingleton (); 
    } 

    / ** 
     * declare a private constructor 
     * / 
    Private HangrySingleton () { 

    } 

    / ** 
     * 
     * /
    Object readResolve Private () { 
        return hangrySingleton; 
    }

     / ** 
     * provide an external interface to obtain the object 
     * @return 
     * / 
    public  static HangrySingleton the getInstance () {
         return hangrySingleton; 
    } 
}

 

Print log:

"C:\Program Files\Java\jdk1.7.0_79\bin\java.exe" "-javaagent:D:\java\devolopKit\idea\anZh\IntelliJ IDEA Community Edition 2018.1.4\lib\idea_rt.jar=22084:D:\java\devolopKit\idea\anZh\IntelliJ IDEA Community Edition 2018.1.4\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.7.0_79\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\jce.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\jfxrt.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\resources.jar;C:\Program Files\Java\jdk1.7.0_79\jre\lib\rt.jar;F:\xiangmu3\Xin\Idea\design_pattern\target\classes" com.geely.design.pattern.creational.singleton.Test
com.geely.design.pattern.creational.singleton.HangrySingleton@5c67aece
com.geely.design.pattern.creational.singleton.HangrySingleton@5c67aece
true

Process finished with exit code 0

 

Guess you like

Origin www.cnblogs.com/1446358788-qq/p/11374488.html