Day31【概念解析】单例模式
目录 ▼
概念定义
中文名称:单例模式/单态模式/单件模式
英文名称:singleton pattern
复述展开
What is Singleton?
概念延申:单例(singleton )在不同领域的概念?
在科学技术领域下:
-
数学领域
-
计算机领域
-
社会科学领域
📌 singleton,用人话说就是,作为名词时,在某个特定领域,只有一类的事物,可以是政府机构、辅音、人;作为形容词时,表示某样事物在某种特定领域下,有且只有一个,具有全局或者当前的唯一性。
What is Singleton Pattern
单例模式是一种创建型的设计模式,通过使用单例模式,可以保证一个类在某个场景下,有且只有一个实例存在,作为全局唯一的节点。
Why is Singleton Pattern
为什么要设计?
-
最常见的原因是控制某些共享资源 (例如数据库或文件) 的访问权限。
-
保证用户访问都是同一个资源。
单例模式架构

所有单例的实现都包含以下两个相同的步骤:
-
将默认构造函数设为私有, 防止其他对象使用单例类的 new运算符。
-
新建一个静态构建方法作为构造函数。 该函数会 “偷偷” 调用私有构造函数来创建对象, 并将其保存在一个静态成员变量中。 此后所有对于该函数的调用都将返回这一缓存对象。
如果你的代码能够访问单例类, 那它就能调用单例类的静态方法。 无论何时调用该方法, 它总是会返回相同的对象。
代码实现
更多Java实现的单例模式:Java Singleton Design Pattern Best Practices with Examples | DigitalOcean
单线程单例模式
多线程单例模式
线程安全的单例模式
懒汉模式
package com.journaldev.singleton;
public class LazyInitializedSingleton {
private static LazyInitializedSingleton instance;
private LazyInitializedSingleton(){}
public static LazyInitializedSingleton getInstance() {
if (instance == null) {
instance = new LazyInitializedSingleton();
}
return instance;
}
}
饥汉模式
public class EagerInitializedSingleton {
private static final EagerInitializedSingleton instance = new EagerInitializedSingleton();
// private constructor to avoid client applications using the constructor
private EagerInitializedSingleton(){}
public static EagerInitializedSingleton getInstance() {
return instance;
}
}
理解体会
单例模式使用在各种语言中都非常常见,像Java中的logging,thread pool。
虽然单例模式很常见,但是它实际上被很多开发者认为是反模式,因为违反了单一职责原理。所以现在,在一些语言中,也在慢慢减少使用单例模式。
在具体使用上,如何需要对共享变量(数据库、文件管理)进行使用,可以使用单例模式,全局共享同一个。