手机网站搭建用什么软件?,广告牌设计模板图片,律师事务所东莞网站建设,如何做网站布局优化#x1f4a7; 单例模式 \color{#FF1493}{单例模式} 单例模式#x1f4a7; #x1f337; 仰望天空#xff0c;妳我亦是行人.✨ #x1f984; 个人主页——微风撞见云的博客#x1f390; #x1f433; 《数据结构与算法》专栏的文章图文并茂#x1f995;生动形… 单例模式 \color{#FF1493}{单例模式} 单例模式 仰望天空妳我亦是行人.✨ 个人主页——微风撞见云的博客 《数据结构与算法》专栏的文章图文并茂生动形象简单易学欢迎大家来踩踩~ 《Java学习笔记》专栏的文章是本人在Java学习中总结的一些知识点~ 《每天一点小知识》专栏的文章可以丰富你的知识库滴水成河~ 希望本文能够给读者带来一定的帮助~文章粗浅敬请批评指正 文章目录 设计模式之单例模式引言单例模式的概念和思想饿汉式懒汉式双重检查静态内部类枚举总结 结语 设计模式之单例模式
引言
设计模式是软件开发中重要的概念之一。单例模式是设计模式中的一种它用于确保一个类只有一个实例并提供一个全局访问点来获取该实例。在本文中我们将深入探讨单例模式的概念和思想并介绍几种常见的代码实现方式。 单例模式的概念和思想 单例模式是一种创建型设计模式其主要目的是限制一个类只能有一个实例并提供一种访问该实例的方式。这对于需要共享资源或控制特定资源访问的场景非常有用。 单例模式的核心思想是通过封装构造函数使得该类无法通过常规的方式创建实例。同时单例模式还提供一个静态方法或者全局变量来获取该类的唯一实例。
常见的代码实现方式 ↓
饿汉式 饿汉式是最简单的单例模式实现方式之一。在该实现中实例在类加载时就被创建因此称为饿汉式。
public class Singleton {private static Singleton instance new Singleton();private Singleton() {// 私有构造函数}public static Singleton getInstance() {return instance;}
}在上述代码中我们通过私有的构造函数确保该类无法在外部被实例化。同时通过静态变量 instance 保存唯一实例并通过静态方法 getInstance() 返回该实例。
懒汉式 懒汉式是另一种常见的单例模式实现方式。与饿汉式不同懒汉式在需要时才创建实例。
public class Singleton {private static Singleton instance;private Singleton() {// 私有构造函数}public static Singleton getInstance() {if (instance null) {instance new Singleton();}return instance;}
}在上述代码中我们将实例的创建延迟到第一次调用 getInstance() 方法时。这种方式在多线程环境下可能会出现问题因为多个线程可能同时调用 getInstance() 方法导致创建多个实例。下面我们将介绍一种改进的懒汉式实现方式。
双重检查 双重检查是一种改进的懒汉式实现方式通过添加同步块来确保只有一个线程能够创建实例。
public class Singleton {private static volatile Singleton instance null;javaprivate Singleton() {// 私有构造函数}public static Singleton getInstance() {if (instance null) {synchronized (Singleton.class) {if (instance null) {instance new Singleton();}}}return instance;}
}在上述代码中我们首先检查实例是否已经存在如果不存在则进入同步块。在同步块内部再次检查实例是否为空如果为空则创建实例。通过使用 volatile 关键字修饰 instance 变量确保在多线程环境下对变量的可见性避免出现创建多个实例的情况。
静态内部类 静态内部类是一种常见的延迟初始化的单例模式实现方式。在该实现中使用内部类来持有实例并在需要时进行初始化。
public class Singleton {private Singleton() {// 私有构造函数}private static class SingletonHolder {private static final Singleton instance new Singleton();}public static Singleton getInstance() {return SingletonHolder.instance;}
}在上述代码中我们将实例的创建放在了静态内部类 SingletonHolder 中。当调用 getInstance() 方法时会返回 SingletonHolder 中的实例从而实现了延迟初始化的效果。这种方式利用了类加载的机制来保证线程安全同时又避免了同步块带来的性能开销。
枚举 枚举是一种简洁且安全的单例模式实现方式。在枚举中每个枚举常量都是该枚举类型的一个实例。
public enum Singleton {INSTANCE;// 添加其他成员和方法
}在上述代码中我们使用了一个单独的枚举常量 INSTANCE 来表示该单例的实例。通过直接访问枚举常量 INSTANCE可以获取到该实例。枚举的特性保证了该实例是全局唯一的同时也提供了线程安全的保证。
总结
通过使用单例模式我们可以确保一个类只有一个实例并提供全局访问点来获取该实例。这在需要共享资源或控制资源访问的场景下非常有用。我们在使用单例模式时也需要注意线程安全和性能等方面的考虑。 结语
初学一门技术时总有些许的疑惑别怕它们是我们学习路上的点点繁星帮助我们不断成长。
积少成多滴水成河。文章粗浅希望对大家有帮助