java设计模式-单例模式(1)

本文深入解析单例模式,包括懒汉模式、饿汉模式、枚举实现、静态内部类及内部枚举实现,探讨其在资源控制和共享场景中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介:单例模式可以保证系统中一个类只有一个实例。即一个类只有一个对象实例。

事例:

  1. 懒汉模式:调用取得实例方法的时候才会实例化对象。

/\*\*

 \* @author 

 \* @since 2019/4/12

 \* msg: 懒汉模式

 \*/

public class LazySingleton {

    private static LazySingleton singleton;

    public static synchronized LazySingleton getInstance(){

        if(singleton==null){

            singleton = new LazySingleton();

        }

        return singleton;

    }

}
  1. 饿汉模式:在单例类被加载时候,就实例化一个对象交给自己的引用
/\*\*

 \* @author 

 \* @since 2019/4/12

 \* msg: 饿汉模式

 \*/

public class HungrySingleton {

    private static final HungrySingleton singleton = new HungrySingleton();

    public static HungrySingleton getInstance(){

        return singleton;

    }

}
  1. 枚举实现单例,利用枚举的特性实现单例又可以保证代码的优雅,又可以实现线程安全,但是这样创建却少了懒加载这一功能
public enum EnumSingleton {

    INSTANCE

}
  1. 静态内部类单例实现:利用jvm的特性,内部类一开始不会被实例化,直到有某个静态成员被调用时才会被实例化。这解决了饿汉模式下的快加载,也解决了懒汉模式下的线程安全问题(建议使用该种方式)
/\*\*

 \* @author 

 \* @since 2019/4/12

 \* msg:

 \*/

public class InnerClassSingleton {

    public static class SingletonHolder {

        private static final InnerClassSingleton INSTANCE

=new InnerClassSingleton();

    }

    private InnerClassSingleton getSingleton() {

        return SingletonHolder.INSTANCE;

    }

}
  1. 内部枚举实现单例:看起来不优雅。但却也做到了懒加载和线程安全的作用
/\*\*

 \* @author 

 \* @since 2019/4/12

 \* msg: 内部枚举类实现单例

 \*/

public class InnerEnumSingleton {

    private enum SingletonHolder {

        INSTANCE;

        private InnerEnumSingleton singleton;

        SingletonHolder() {

            singleton=new InnerEnumSingleton();

        }

        public InnerEnumSingleton getSingleton() {

            return singleton;

        }

    }

    public InnerEnumSingleton getSingleton() {

        return SingletonHolder.INSTANCE.getSingleton();

    }

}

 

场景:

  1. 需要频繁实例化然后销毁的对象。
  2. 创建对象时耗时过多或者耗资源过多,但又经常用到的对象。
  3. 资源共享的情况下,避免由于资源操作时导致的性能或损耗等
  4. 控制资源的情况下,方便资源之间的互相通信。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值