单例模式

2019-04-12  本文已影响0人  意大利大炮

资料借鉴:http://cantellow.iteye.com/blog/838473
类加载机制参考: https://www.jianshu.com/p/d9a6de11b346

简单介绍:

定义:

特点:

实现方式:

具体实现

1. 饿汉模式
public class Singleton2 {
    private static Singleton2 singleton2= new Singleton2();

    private Singleton2(){}

    public static Singleton2 getInstance() {
    return singleton2;
    }

    public static String getStr() {
    return "Create String type Object";
    }
}
2. 懒汉模式
public class Singleton3 {
    private static Singleton3 singleton2 = null;

    private Singleton3(){
        Tools.println("类实例化");
    }

    public static synchronized Singleton3 getInstance(){
        if(singleton2 == null)
            singleton2 = new Singleton3();
        return singleton2;
    }

    public static void CreateString(){
        Tools.print("Create String in Singleton3");
    }
}
3. 双重检测方式
class Singleton1 {
    public static Singleton1 instance = null;
    private Singleton1() {}

    public static Singleton1 getInstance() {
        if (instance == null) {
            synchronized (Singleton1.class) {
                if (instance == null) {
                    instance = new Singleton1();
                }
            }
        }
        return instance;
    }
}
4. 静态内部类实现
public class Singleton4 {
    private Singleton4(){}
    static class SingletonHolder {
        private static Singleton4 singleton = new Singleton4();
    }

    public static Singleton4 getInstance(){
        return SingletonHolder.singleton;
    }
}
5. 枚举
public enum Singleton {  
    INSTANCE;  
    public void whateverMethod() {  
    }  
}

问题

public class Singleton implements java.io.Serializable {
    public static Singleton INSTANCE = new Singleton();
    protected Singleton() {}

    private Object readResolve() {
        return INSTANCE;
    }
}

第二个问题的解决方法:

public class Singleton implements java.io.Serializable {
    public static Singleton INSTANCE = new Singleton();
    protected Singleton() {}

    private Object readResolve() {
        return INSTANCE;
    }
}

应用场景:

总结

上一篇 下一篇

猜你喜欢

热点阅读