作者主页:Designer 小郑
作者简介:3年JAVA全栈开发经验,专注JAVA技术、系统定制、远程指导,致力于企业数字化转型,CSDN学院、蓝桥云课认证讲师。
主打方向:Vue、SpringBoot、微信小程序
本文讲解了 Java 设计模式中的单例模式,并给出了样例代码,单例模式,确保每个类只能有一个实例,并提供一个全局访问点来获取该实例。
Java 中的单例模式是一种设计模式,它确保某个类只能有一个实例,并提供一个全局访问点来获取该实例。
实现单例模式可以有多种方式,其中最常用的方式有两种:懒汉式和饿汉式。
懒汉式在首次调用获取实例的方法时才创建对象。
以下是一种常见的懒汉式单例模式的实现方式,请同学们认真学习。
public class Singleton {
private static Singleton instance;
private Singleton() {
// 私有构造方法
}
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
提示:上述实现在多线程环境下可以正常工作,但是由于在获取实例的方法上加了同步锁,会导致性能下降。
饿汉式在类加载时就创建对象,因此可以保证在任何时候都只有一个实例。
以下是一种常见的饿汉式单例模式的实现方式,请同学们认真学习。
public class Singleton {
private static final Singleton instance = new Singleton();
private Singleton() {
// 私有构造方法
}
public static Singleton getInstance() {
return instance;
}
}
提示:饿汉式可以确保在多线程环境下也能正常工作,但可能会造成资源浪费,因为实例在类加载时就创建。
无论使用懒汉式还是饿汉式,单例模式都需要注意线程安全性、序列化和反射等方面的问题。如果需要更好的线程安全性和更高的性能,可以考虑使用双重检查锁定或静态内部类等方式实现单例模式。
在第一章简单介绍了单例模式,接下来进行详细介绍,并给出详细代码。
在 Java 中,实现单例模式的方式有以下几种。
public class LazySingleton {
private static LazySingleton instance;
private LazySingleton() {
// 私有构造方法
}
public static synchronized LazySingleton getInstance() {
if (instance == null) {
instance = new LazySingleton();
}
return instance;
}
}
public class EagerSingleton {
private static final EagerSingleton instance = new EagerSingleton();
private EagerSingleton() {
// 私有构造方法
}
public static EagerSingleton getInstance() {
return instance;
}
}
public class DoubleCheckedSingleton {
private volatile static DoubleCheckedSingleton instance;
private DoubleCheckedSingleton() {
// 私有构造方法
}
public static DoubleCheckedSingleton getInstance() {
if (instance == null) {
synchronized (DoubleCheckedSingleton.class) {
if (instance == null) {
instance = new DoubleCheckedSingleton();
}
}
}
return instance;
}
}
public class StaticInnerSingleton {
private StaticInnerSingleton() {
// 私有构造方法
}
private static class SingletonHolder {
private static final StaticInnerSingleton instance = new StaticInnerSingleton();
}
public static StaticInnerSingleton getInstance() {
return SingletonHolder.instance;
}
}
以上是常用的几种单例模式的实现方式,在实现单例模式时,需要考虑线程安全性、序列化和反射等方面的问题。
单例模式在以下 5 5 5 情况下常常被使用,请同学们认真学习。
总的来说,单例模式适用于需要在系统中全局访问且只有一个实例的场景,可以提供一种简洁、方便、安全的解决方案。然而,过度使用单例模式可能导致代码的耦合性增加,应谨慎使用。
本文讲解了 Java 设计模式中的单例模式,并给出了样例代码,在下一篇博客中,将讲解 Java 工厂方法模式。