美文网首页
creator :单例模式 ( Singleton Patter

creator :单例模式 ( Singleton Patter

作者: 柳源居士 | 来源:发表于2019-02-27 23:33 被阅读0次

单例模式的特点是 一个对象只有一个实例。可以用于系统全局变量的设置。
实现思路:
利用的是private 方法只能类本身调用。因此把构造方法声明为private,只能通过类内部的public static方法来声明该类的实现(如果不声明为static,则无法调用,变成先有鸡还是先有蛋的问题了),并用一个该类型的static变量来保存该类的唯一实例。
注意:
使用单列模式应该注意线程安全问题,可以改进成线程安全的单例。
使用类加载器,同样会创建多个实例

类图.png

实现:

package singleton;

public class Singleton {
    private static Singleton instance;

    private Singleton() {

    }
    //延迟实例化,线程不安全
    public static Singleton getInstance() {
        if(instance==null){
            instance=new Singleton();
        }
        return instance;
    }

    //带线程锁的延迟实例化,可以确保线程安全,但效率低下,即使实例存在,还是会调用线程锁
    //如果对调用此方法导致的效率问题不是很关心,则可以保持
   /* public static synchronized Singleton getInstance() {
        if(instance==null){
            instance=new Singleton();
        }
        return instance;
    }*/

    //急切实例化,线程安全
    //private static Singleton instance=new Singleton();
    /*
    public static Singleton getInstance() {
        return instance;
    }
    */

}

双重检验法

package singleton;

public class DoubleCheckSingleton {
    //volatile确保多线程时,正确使用实例。确保共享变量的可见性。
    private volatile static DoubleCheckSingleton instance;

    private DoubleCheckSingleton() {
    }

    public static DoubleCheckSingleton getInstance(){
        if(instance==null){
            synchronized (Singleton.class){ //对象全局锁
                if(instance==null){
                    instance=new DoubleCheckSingleton();
                }
            }
        }
        return instance;
    }
}

相关文章

网友评论

      本文标题:creator :单例模式 ( Singleton Patter

      本文链接:https://www.haomeiwen.com/subject/zfohlqtx.html