Java设计模式:单例模式-独一无二的对象

2017-08-04  本文已影响0人  Clannad_汐

概念:

实现:

public class SingletonDemo01 {
    //使用静态变量来记录SingletonDemo01的唯一实例
    private static SingletonDemo01 singleton;
    //创建一个私有的构造器
    private SingletonDemo01() {
    }
    //获取单例对象的方法
    public static SingletonDemo01 getInstance(){
        //如果对象为空则创建
        if(singleton == null) {
            singleton = new SingletonDemo01();
        }
        //返回对象
        return singleton;
    }
}

public class SingletonDemo01 {
    //使用静态变量来记录SingletonDemo01的唯一实例
    private static SingletonDemo01 singleton;
    //创建一个私有的构造器
    private SingletonDemo01() {
    }
    //获取单例对象的方法  添加了同步锁
    public static synchronized SingletonDemo01 getInstance(){
        //如果对象为空则创建
        if(singleton == null) {
            singleton = new SingletonDemo01();
        }
        //返回对象
        return singleton;
    }
}
public class SingletonDemo02 {
    //在静态初始化器中构建单件 保证了线程安全
    private static SingletonDemo02 singleton = new SingletonDemo02();
    //私有化构造器
    private SingletonDemo02() {};
    //返回该类的对象
    public static SingletonDemo02 getInstance() {
        return singleton;
    }
}


//双重检查加锁 实现单例
public class SingletonDemo03 {
    //volatile关键字确保singleton被初始化时,线程正确的处理singleton变量
    private volatile static SingletonDemo03 singleton;
    private SingletonDemo03(){}
    public static SingletonDemo03 getInstance() {
        //只同步第一次
        if(singleton == null) {
            synchronized (SingletonDemo03.class) {
                if(singleton == null) {
                    singleton = new SingletonDemo03();
                }
            }
        }
        return singleton;
    }
}

总结:

  1. 如果getInstance() 的性能对应用程序不是很关键,方法一更合适
  2. 如果程序总是在创建和使用单例,方法二更合适
  3. 如果想要提升性能,减少同步锁的使用,则方式三更合适
上一篇 下一篇

猜你喜欢

热点阅读