紫色的网站,电商网站代码设计,建设银行网站为什么登不上,网站超市源码文章目录 前言一、什么是单例模式#xff1f;二、为什么要用单例模式#xff1f;三、如何实现单例模式#xff1f;总结 前言
提示#xff1a;设计者模式有利于提高开发者的编程效率和代码质量#xff1a;
GoF#xff08;Gang of Four#xff0c;四人帮#xff09;设计… 文章目录 前言一、什么是单例模式二、为什么要用单例模式三、如何实现单例模式总结 前言
提示设计者模式有利于提高开发者的编程效率和代码质量
GoFGang of Four四人帮设计模式由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四位作者合著介绍了23种经典的设计模式。 分为三大类创建型模式、结构型模式和行为型模式。 提示以下是本篇文章正文内容下面案例可供参考
一、什么是单例模式
单例模式是一种创建型设计模式它保证一个类只有一个实例并提供一个全局访问点来获取这个实例。这通常用于需要集中控制或管理资源的场景例如数据库连接、线程池、配置文件读取等。
二、为什么要用单例模式
使用单例模式的原因包括但不限于以下几点
资源控制确保系统中某个资源仅有一个实例避免资源浪费或冲突。全局访问提供一个全局访问点使得系统中的任何部分都可以方便地访问该实例。节省内存因为只有一个实例存在所以可以节省系统资源特别是当对象占用大量内存时。状态共享对于需要在多个地方共享状态的情况单例模式可以确保状态的一致性。初始化成本高如果对象的创建过程非常复杂或者耗时那么使用单例模式可以在第一次使用时才进行创建从而延迟初始化提高性能。
三、如何实现单例模式
单例模式的实现有多种方式下面是一些常见的实现方法
1、懒汉式Lazy Initialization 懒汉式是在第一次调用 getInstance 方法时才创建实例这样可以实现延迟加载节省资源。
public class Singleton {private static Singleton instance;private Singleton() {} // 私有构造函数防止外部实例化public static synchronized Singleton getInstance() {if (instance null) {instance new Singleton();}return instance;}
}优点实现了真正的懒加载即只有在真正需要的时候才会创建实例。
缺点每次调用 getInstance 方法都需要进行同步这可能会带来性能问题。
2、饿汉式Eager Initialization 饿汉式是在类加载时就创建实例因此不需要同步性能较好。
public class Singleton {private static final Singleton instance new Singleton();private Singleton() {} // 私有构造函数防止外部实例化public static Singleton getInstance() {return instance;}
}优点没有线程安全问题也不需要同步性能较高。
缺点无论是否使用都会创建实例无法实现懒加载。
3、双重检查锁定Double-Checked Locking 双重检查锁定是一种优化过的懒汉式实现减少了不必要的同步操作提高了性能。
public class Singleton {private static volatile Singleton instance;private Singleton() {} // 私有构造函数防止外部实例化public static Singleton getInstance() {if (instance null) { // 第一次检查synchronized (Singleton.class) {if (instance null) { // 第二次检查instance new Singleton();}}}return instance;}
}优点既实现了懒加载又避免了每次调用 getInstance 时都进行同步性能较高。
缺点实现稍微复杂一些而且需要理解Java内存模型和volatile关键字的作用。
4、静态内部类Static Inner Class 静态内部类是另一种实现懒加载的方式利用了类加载机制确保线程安全。常用
public class Singleton {private Singleton() {} // 私有构造函数防止外部实例化private static class SingletonHolder {private static final Singleton INSTANCE new Singleton();}public static Singleton getInstance() {return SingletonHolder.INSTANCE;}
}优点线程安全且实现了懒加载性能良好代码简洁。
缺点与其它方式相比可能不是最直观的理解方式。 总结
选择哪种实现方式取决于具体的应用场景和需求后期会新增关于单例模式的具体应用场景。