本文介绍: 单例模式(Singleton Pattern)是一种常用的软件设计模式,用于确保一个类只有一个实例,并提供一个全局访问点来获取这个实例。单例模式主要用于控制对某个资源或服务的访问,确保整个系统中只有一个对象实例负责这些操作。单一实例该模式确保一个类只有一个实例存在。通常通过隐藏该类的构造函数,并提供一个静态方法来创建和获取这个唯一实例。全局访问点单例类提供了一个全局访问点,通过这个访问点可以访问唯一实例。这通常是一个静态方法,例如。自我实例化。
定义:
单例模式(Singleton Pattern)是一种常用的软件设计模式,用于确保一个类只有一个实例,并提供一个全局访问点来获取这个实例。单例模式主要用于控制对某个资源或服务的访问,确保整个系统中只有一个对象实例负责这些操作。
单例模式的关键特点包括:
解决的问题:
使用场景:
示例代码:
1. 懒汉式(线程不安全)
public class SingletonLazy {
private static SingletonLazy instance;
private SingletonLazy() {}
public static SingletonLazy getInstance() {
if (instance == null) {
instance = new SingletonLazy();
}
return instance;
}
}
2. 懒汉式(线程安全)
public class SingletonLazySynchronized {
private static SingletonLazySynchronized instance;
private SingletonLazySynchronized() {}
public static synchronized SingletonLazySynchronized getInstance() {
if (instance == null) {
instance = new SingletonLazySynchronized();
}
return instance;
}
}
3. 饿汉式(线程安全)
public class SingletonEager {
private static final SingletonEager INSTANCE = new SingletonEager();
private SingletonEager() {}
public static SingletonEager getInstance() {
return INSTANCE;
}
}
4. 双重校验锁(线程安全)
public class SingletonDoubleCheckedLocking {
private static volatile SingletonDoubleCheckedLocking instance;
private SingletonDoubleCheckedLocking() {}
public static SingletonDoubleCheckedLocking getInstance() {
if (instance == null) {
synchronized (SingletonDoubleCheckedLocking.class) {
if (instance == null) {
instance = new SingletonDoubleCheckedLocking();
}
}
}
return instance;
}
}
5. 静态内部类(线程安全)
public class SingletonStaticInnerClass {
private static class SingletonHolder {
private static final SingletonStaticInnerClass INSTANCE = new SingletonStaticInnerClass();
}
private SingletonStaticInnerClass() {}
public static SingletonStaticInnerClass getInstance() {
return SingletonHolder.INSTANCE;
}
}
6. 枚举方式(线程安全)
public enum SingletonEnum {
INSTANCE;
public void doSomething() {
// 执行操作
}
}
主要符合的设计原则:
- 单一职责原则(Single Responsibility Principle):
- 单例模式确保了类有一个单一的职责,即管理自己的唯一实例。这个类负责创建、管理这个实例,并提供一个全局访问点。
- 开闭原则(Open-Closed Principle):
- 里氏替换原则(Liskov Substitution Principle):
- 接口隔离原则(Interface Segregation Principle):
- 单例模式并不直接关注接口隔离原则,因为它通常不涉及接口的多重继承。单例类提供的接口是围绕其唯一实例的管理。
- 依赖倒转原则(Dependency Inversion Principle):
综上所述,单例模式主要体现了单一职责原则,但在其他几个设计原则方面的适用性较为有限。它专注于控制类实例的数量,而在继承性和接口设计方面的灵活性不如其他设计模式。
在JDK中的应用:
这些例子展示了单例模式在Java标准库中的应用,特别是在需要全局访问点和统一管理资源的情况下。单例模式通过确保类的单个实例全局可用,简化了对共享资源或服务的访问和管理。
在Spring中的应用:
单例模式在Spring框架中的应用帮助管理了Bean的生命周期和状态,确保了资源的高效利用和应用组件的统一访问。同时,由于Spring容器管理着Bean的创建和销毁,所以它还减轻了开发者处理单例实例化和线程安全问题的负担。然而,使用单例Bean时,需要注意Bean的状态管理,避免因状态共享导致的潜在问题。
原文地址:https://blog.csdn.net/haoxin963/article/details/134570968
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_2431.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。