重学设计模式之单例模式
单例模式(Singleton)
单例模式(Singleton Pattern)顾名思义就是该类有且只有一个实例,并且对外提供可以访问该实例的方法,在23中设计模式中属于创建型模式,它提供了一种创建对象的最佳方式。
严格来说有7种写法,有2种是完美的写法,一般不用
特点
只有一个实例
一般拥有私有的构造方法和静态实例
实现方法:
饿汉模式:静态常量对象实例,对外提供访问该实例的方法(简单,有效,无线程安全问题)
懒汉模式:
静态对象实例,对外提供访问该实例的方法,判断实例是否初始化,没有初始化时进行初始化(多线程访问时,刚开始可能会产生多个实例)
静态对象实例,使用
synchronized
修饰访问方法(多线程访问时会有效率问题)静态对象实例,使用
synchronized
对判断语句枷锁(同上)静态对象实例(没有问题)
这里对实例变量要加上
volatile
,因为执行的时候会有一个语句重排,尤其是用JIT时,它会在没有语句重排的时候就返回INSTANCE
静态内部类方式实现(完美写法之一)
使用枚举方式实现(完美写法之二)
该写法还可以防止反序列化,原因是枚举类没有构造方法,枚举是个
abstract class
评论