单例模式(Singleton Pattern)
是设计模式中最简单也最常见的一种。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在单例模式中,一个类只有一个实例存在,同时该类的实例由一个预先定义好的静态引用变量所持有,以便在整个系统中随时访问它。
模式结构与角色
- 单例类(Singleton):拥有一个私有的静态成员变量来保存单例实例,拥有一个私有的构造器防止被实例化,提供一个公有的静态方法来获取该类的唯一实例。
工作原理
单例模式通过以下步骤来确保一个类只有一个实例并且这个实例易于被访问:
- 私有构造器:将类的构造器私有化,防止外部代码通过new关键字创建该类的实例。
- 静态私有成员变量:在类内部定义一个静态的私有成员变量来保存该类的唯一实例。
- 公有静态方法:提供一个公有的静态方法来获取该类的唯一实例。该方法首先会检查静态成员变量是否已经保存了类的实例,如果已经保存则直接返回该实例;否则创建一个新的实例并保存到静态成员变量中,然后返回该实例。
优点
- 控制资源访问:通过单例模式可以确保系统中对某个类的实例只有一个,从而控制对该类资源的访问。
- 减少全局变量:在不需要频繁创建和销毁对象的情况下,使用单例模式可以减少内存开销,提高系统性能。
- 简化访问:单例模式提供了一个全局访问点,使得系统更容易访问和使用该类的实例。
缺点
- 扩展性差:由于单例模式限制了类的实例化,因此很难对其进行扩展和修改。
- 滥用可能导致问题:如果滥用单例模式,可能会导致系统中过多的单例类,增加系统的复杂性和维护成本。
- 实现方式
- 单例模式有多种实现方式,包括饿汉式(静态常量)、饿汉式(静态代码块)、懒汉式(线程不安全)、懒汉式(线程安全,同步方法)、懒汉式(双重检查锁定/DCL,即线程安全,同步代码块)、静态内部类、枚举等。其中,枚举方式是最推荐的实现方式,因为它既简单又安全。
示例代码(Java,使用枚举方式)
public enum Singleton {
INSTANCE;
// 其他方法或属性
public void doSomething() {
// ...
}
// 获取单例对象的静态方法
public static Singleton getInstance() {
return INSTANCE;
}
}
// 客户端代码
public class Client {
public static void main(String[] args) {
Singleton singleton = Singleton.getInstance();
singleton.doSomething();
}
}
标签:Singleton,单例,静态,模式,实例,该类
From: https://www.cnblogs.com/zjjtt/p/18217885