设计模式学习笔记(二) 单例模式

时间:2022-03-09 00:15:24

单例模式是一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,是一个比较简单的模式。

代码:

public class Singleton {

        private static final Singleton singleton = new Singleton();

        private Singleton(){}

        public static Singleton getSingleton(){
            return singleton;
        }
    }

使用场景:

  • 生成唯一序列号的环境;
  • 整个项目中需要一个共享访问点或共享数据;
  • 创建一个对象需要消耗的资源过多;
  • 需要定义大量的静态常量和静态方法的环境,可以采用单例模式;

线程不安全的单例:

public class Singleton {

    private static Singleton singleton = null;

    private Singleton(){}

    public static Singleton getSingleton(){
        if (null==singleton){
            singleton = new Singleton();
        }
        return singleton;
    }
}

解决方法:
在方法上加上synchronized关键字:

public class Singleton {

    private static Singleton singleton = null;

    private Singleton(){}

    public synchronized static Singleton getSingleton(){
        if (null==singleton){
            singleton = new Singleton();
        }
        return singleton;
    }
}

说明:通用代码通常称作为懒汉是,单例不安全模式通常称为饿汉式。