Ps--->以上内容仅代表个人理解,如有意见偏差那你是对的
单例模式是一种设计模式,它确保一个类在任何情况下都只能被实例化一次(一个类只有一个实例),且该实例可以全局访问。这意味着,每次请求该类的实例时,都会返回相同的对象。
实现单例模式的方式有多种,这个模式核心思想是限制类的实例化过程,控制对象的创建和访问
以下是一个简单的单例模式实现示例:
javaCopy Code
public class Singleton {
private static Singleton instance = null;
private Singleton() {
// 将构造函数设为私有,防止外部代码创建新的实例
}
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
上述代码中,getInstance() 方法是获取该类唯一实例的静态方法。如果实例还未创建,则该方法会创建一个新的实例并返回;如果实例已经存在,则直接返回该实例。
使用单例模式可以确保一个类在内存中只有一个实例存在,从而节省资源,并且可以避免由于多个实例导致的数据不一致等问题
常见的实现方式有:
懒汉式单例:在首次使用时才创建实例。
饿汉式单例:在类加载时才创建实例。
双重检查锁定单例:使用双重检查锁定来确保线程安全和延迟加载。
单例模式的优点:
避免了重复创建对象:该模式确保在整个程序中只有一个实例存在,只创建一个实例避免创建相同类型的对象,节省了系统资源。
提供了全局访问点:通过单例模式,可以方便地拿到实例,简化了对象之间的通信和调用。
实现了延迟加载:某些情况下,单例对象可能需要在首次使用时才被创建,这样实现了延迟加载,提高了性能和资源利用率。
单例模式的缺点:
单一职责原则:单例模式 将创建实例 和业务逻辑 耦合在一起,违反了单一职责原则,增加了代码的复杂性和维护成本。
难以扩展:由于单例模式只允许存在一个实例,因此扩展单例类可能会导致 程序的改变 和增加代码复杂性。
隐藏了依赖关系:,因为单例对象通常会 隐藏其依赖关系,使用单例模式的代码很难进行单元测试 可能引发线程安全问题:如果在多线程环境下使用不当,可能会引发线程安全问题,需要额外的代码来保证线程安全