单例模式(Singleton Pattern)

概念

单例模式其实是设计模式中最简单的,很容易理解,它只包含一个类。在考虑下一个设计模式写哪个的时候,也在犹豫是否要介绍单例模式,因为确实比较简单,不知道从哪里去介绍它,所以这一篇可能会比较简单。

确保一个类只有一个实例,并提供一个全局访问点来访问这个唯一实例

解释

不知道从何说,就直接写上代码吧

public class SIngleton {
	private static Singleton instance = null;

	private Singleton() {
	}

	private static Singleton getInstance() {
		if (instance == null) {
			instance = new Singleton();
		}
		return instance;
	}
}

额…应该很容易理解,单例模式保证一个类有且仅有一个实例,并提供一个全局的访问点,确保只有一个实例会被创建。网站的计数器、线程池的设计等等通常也是采用单例模式。
在学习单例模式的时候,我们需要了解一下以下两种类型:

  • 饿汉式单例
  • 懒汉式单例

饿汉式单例:在类加载的时候立刻会实例化,使用只会出现一份实例。
懒汉式单例:在类加载的时候没有直接实例化,而是调用指定实例方法的时候再进行实例化,这样就能保证不想使用的时候也不会实例化。

饿汉式与懒汉式的比较:
由于饿汉式单例类在类加载是就被实例化,因此在对于多线程场景下,可以确保唯一性,因此它是线程安全的,但从系统的加载效率上来讲,饿汉式会比懒汉式的效率低,但由于懒汉式是在使用时才进行实例化,在多线程同时访问时,不能确保只有一个实例,因此有可能会造成线程不安全,当然我们可以通过双重检查锁定等机制进行,这里就不深入讲解,有兴趣的可以自行去了解。

缺点

  • 扩展困难
  • 职责过重,违背单一职责原则
  • 对于某些拥有自动垃圾回收机制的语言,长时间不使用感想对象,容易被误认为垃圾自动销毁并且回收

适用场景

  1. 系统只需要一个实例对象
  2. 只允许一个公共访问点,不允许其他途径访问。

上期答案

B

一问三不知

单例模式的三个要点是什么?

下一篇:适配器模式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值