单例模式:保证一个类只有一个实例,并提供全局的一个访问对象
优点:
节省系统资源,不用频繁创建对象
资源共享,使用同一个实例,不会存在信息不匹配
实现:
1、饿加载(饿汉模式)
即在系统初始化时,便生成对象,线程安全
/*** 饿加载单例*/public class HungrySingle {private static HungrySingle hungrySingle = new HungrySingle();public static HungrySingle getHungrySingle(){return hungrySingle;}private HungrySingle(){}}
2、懒加载(懒汉模式)
即系统初始化时不生成对象,使用对象时,才生成对象,线程不安全(当线程A判断对象null时,会去创建对象,这时线程B访问,对象还未创建,线程B会再去创建对象,所以懒加载是线程不安全的)
/*** 懒加载单例*/public class LazyLoadingSingle {private static LazyLoadingSingle lazyLoadingSingle;public static LazyLoadingSingle getLazyLoadingSingle(){if (lazyLoadingSingle == null){lazyLoadingSingle = new LazyLoadingSingle();}return lazyLoadingSingle;}private LazyLoadingSingle(){}}
3、枚举创建
枚举创建也是线程安全的,这个方法其实是用到了枚举构造方法只会执行一次的特性
/*** 枚举单例*/public class EnumSingle {public static EnumSingle getEnumSingle(){return DemoSingleEnum.INSTANCE.enumSingle;}private enum DemoSingleEnum{INSTANCE;private EnumSingle enumSingle;public EnumSingle getEnumSingle(){return enumSingle;}DemoSingleEnum(){enumSingle = new EnumSingle();}}private EnumSingle(){}}
最后测试结果,不管方法调用几次,获取到的都是同一个对象
