Java 设计模式 01:单例模式

Java 设计模式 01:单例模式

单例模式

​ 单例模式的定义顾名思义就是一个类只有一个实例,形象地说例如 Windows 系统我的电脑属性界面,就是一个单例模式的例子,当已经有一个打开的我的电脑属性界面,我们无法再打开一个新的相同的界面

​ 单例模式有以下特点:

  • 单例类只有一个实例对象
  • 这个对象只能由单例类自行创建
  • 单例类对外提供一个可以访问单例实例的全局访问点

单例模式的设计

​ 通常情况下,我们设计的类的构造函数都是共有的(public),我们可以在程序中通过new 构造函数()的方式按需创建多个实例,要实现单例模式的要求,我们就要将构造函数设置为私有的(private),这时程序无法直接通过new创建对象,就需要单例类为其提供一个生成实例的全局接口

懒汉式

​ 懒汉式不会在程序运行时自动创建实例,而是在程序中调用单例类提供的接口时再创建,这样就需要在单例类中做一定的限制:

// 懒汉式单例模式
public class LazySingleton {
    private static volatile LazySingleton instance = null;

    private LazySingleton() {
        // private 避免类在外部被实例化
    }

    public static synchronized LazySingleton getInstance() {
        if (instance == null) {
            instance = new LazySingleton();
        }
        return instance;
    }
}

饿汉式

​ 饿汉式会在单例类初始化时就创建单例实例,因为单例类的初始化只有一次,所以单例实例也一定只有一个:

// 饿汉式单例模式
public class HungrySingleton {
    private static final HungrySingleton instance = new HungrySingleton();

    private HungrySingleton() {

    }

    public static HungrySingleton getInstance() {
        return instance;
    }
}

单例模式的优缺点

优点

  • 确保所有对象都访问同一个实例
  • 实现了对唯一实例的受控访问
  • 只存在一个实例,节约系统资源,避免共享资源的多重占用

缺点

  • 不适用变化的对象
  • 单例模式没有抽象层,扩展上有难度
  • 单例类职责过重,一定程度上违背了“单一职责原则”
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值