我是靠谱客的博主 坦率鱼,最近开发中收集的这篇文章主要介绍局部变量初始化java创建型设计模式,设计模式-创建型-单例模式,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

a51a8b29151c5f1cfc1e088d9e8a3467.png

介绍

单例模式是一种创建型设计模式 ????,能够保证一个类只有一个实例,并提供一个访问该实例的全局节点。

特点

保证一个类只有一个实例。最常见的原因是控制某些共享资源,例如数据库或文件的访问权限。它的运作方式是这样的,如果此时你创建了一个对象,过一会你决定再创建一个对象,但是此时你会获得刚才已经创建好的对象,而不会产生一个新对象。⚠️ 要注意的是,普通构造函数无法实现,构造函数的设计决定了它一定要产生一个新对象。

为该实例提供一个全局访问节点,单例模式允许在程序任何地方访问特定对象。但是它可以保护该实例不会被其他代码所覆盖。

解决方案

将默认构造函数设置为私有,防止其他对象使用单例类的 new 关键字进行实例化。

新建一个静态构造方法作为构造函数。该函数会调用私有构造函数来创建对象,无论何时调用该方法,它总是会返回相同的对象。

public class Singleton {

public static Singleton instance;

private Singleton() {}

public static Singleton getInstance() {

...

...

...

}

}

懒汉模式

public static Singleton getInstance() {

if (Objects.isNull(instance)) {

instance = new Singleton();

}

return instance;

}

这种方式实现起来十分简单,但是如果多线程访问单例对象,无法保证线程安全。

public static synchronized Singleton getInstance() {

if (Objects.isNull(instance)) {

instance = new Singleton();

}

return instance;

}

使用 synchronized 关键字控制多线程访问,同一时刻只有一个线程可以进入代码块,确保了线程安全。但是这种方式会降低程序运行效率。

public static Singleton getInstance() {

if (Objects.isNull(instance)) {

synchronized (Singleton.class) {

if (Objects.isNull(instance)) {

instance = new Singleton();

}

}

}

return instance;

}

使用双重校验的方式,既确保了线程安全,也不会影响程序运行效率。但是有出现空指针的风险。

public static Singleton getInstance() {

return StaticSingletonHolder.INSTANCE;

}

private static class StaticSingletonHolder {

private static final Singleton INSTANCE = new Singleton();

}

使用静态内部类的方式,确保不会重复创建对象,也不会影响程序效率。并且还是懒加载的方式,内存方面也处理的非常好。

饿汉模式

private static final Singleton INSTANCE = new Singleton();

public static Singleton getInstance() {

return INSTANCE;

}

使用 final 静态成员变量,当类第一次加载到内存中的时候就完成了初始化,保证了线程安全。

public static SingletonUsingEnum getInstance() {

return SingletonUsingEnum.INSTANCE;

}

private enum SingletonUsingEnum {

INSTANCE;

}

使用枚举的方式,可以保证不会重复创建对象,线程安全。还可以避免反射和序列化等带来的问题。是实现单例模式最好的方式。

总结

这是重新学习单例模式的笔记,其中可能有很多地方写的不对,写得不好,欢迎大家指正 ????。

本作品采用《CC 协议》,转载必须注明作者和本文链接

Hello。

最后

以上就是坦率鱼为你收集整理的局部变量初始化java创建型设计模式,设计模式-创建型-单例模式的全部内容,希望文章能够帮你解决局部变量初始化java创建型设计模式,设计模式-创建型-单例模式所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(38)

评论列表共有 0 条评论

立即
投稿
返回
顶部