高频面试题-----Singleton《单例模式》

高频面试题-----Singleton《单例模式》

什么是Singleton ?

  • Singleton : 在 Java 中即指单例设计模式,它是软件开发中最常用的设计模式之一;
  • :唯一
  • :示例
  • 单例设计模式,即某个类在整个系统中只能有一个实例对象可被获取和使用的代码模式;
  • 例如 : 代表JVM运行环境的Runtime类;

要点

  • 1)某个类只能由一个实例;
  • 构造器私有化
  • 2)它必须自行创建这个实例;
  • 含有一个该类的静态变量来保存这个唯一的实例
  • 3)它必须自行向整个系统提供这个实例:
  • 对外提供获取该实例对象的方式:
  • a 直接暴露
  • b 用静态变量的get方法获取

几种常见的形式

  • 饿汉式 : 直接创建对象,不存在线程安全问题
  • 直接实例化饿汉式(简洁直观)
  • 枚举式(最简洁)
  • 静态代码块饿汉式(适合复杂实例化)
  • 懒汉式 : 延迟创建对象
  • 线程不安全(适用于单线程)
  • 线程安全(使用于多线程)
  • 静态内部类形式(适用于多线程)

废话不说,代码奉上,请兄台笑纳:

饿汉式:------ 直接创建对象,不存在线程安全问题

(1)直接实例化饿汉式 , 不管你用不用;
方式:
  • (1) 构造器私有化
  • (2) 自行创建,并且使用静态变量保存
  • (3) 向外提供这个实例
  • (4) 强调这是一个单例,我们可以用final修饰
public class SingletonEager {
   
    public static final SingletonEager INSTANCE = new SingletonEager();
    private SingletonEager(){
   }
}
(2)直接实例化饿汉式 , 不管你用不用;
方式:
  • (1) 枚举类型:表示类型的对象是有限的几个
  • (2) 我们可以限定为一个,就成单例了;
public enum  SingletonEagerEnum {
   
    INSTANCE
}
(3)静态代码块(适合复杂实例化)
方式:
  • 实现方式与直接实例化相似,只是增加为静态代码块,从而方便增加一些必要业务代码;
public class SingletonEagerStatic {
   
    public static final SingletonEagerStatic INSTANCE;
    static {
   
        // 获取配置文件信息
        try {
   
            Properties properties = new Properties();            	
            properties.load(SingletonEagerStatic.class.getClassLoader().getResourceAsStream("application.properties"));
            INSTANCE = new SingletonEagerStatic(properties.getProperty("info"));
        } catch (IOException e) {
   
            throw new RuntimeException(e)
  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值