Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >单例模式

单例模式

作者头像
Dean0731
发布于 2022-05-10 08:29:20
发布于 2022-05-10 08:29:20
91000
代码可运行
举报
文章被收录于专栏:blog-技术博客blog-技术博客
运行总次数:0
代码可运行
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import java.io.Serializable;
// 修改后的单例模式
 
// 使用线程同步创建,防止进程切换重复创建线程,
// 设置volatile关键字修饰,使读取singleton对象时能够获取最新状态
// 修改构造方法,防止反射创建对象
// 修改readResolve方法,防止反序列化对象时重新创建对象
// 重写克隆方法,防止对象克隆
public class Singleton2 implements Serializable, Cloneable {
    private static volatile Singleton2 singleton;
 
    private Singleton2() {
        if (singleton != null) {
            throw new RuntimeException("对象已被创建");
        }
    }
    public static Singleton2 getInstance() {
        if (singleton == null) {
            synchronized (singleton) {
                if (singleton == null)
                    singleton = new Singleton2();
            }
        }
        return singleton;
    }
 
    private Object readResolve() {
        return singleton;
    }
 
    @Override
    protected Object clone() throws CloneNotSupportedException {
        return getInstance();
    }
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 还可以创建
Constructor<Singleton2> con = Singleton2.class.getDeclaredConstructor(null);
con.setAccessible(true);
Singleton2 s1 = con.newInstance();
Singleton2 s2 = con.newInstance();
System.out.println(s1);
System.out.println(s2);
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 枚举方式,可以完全防止反射
enum Singleton2 implements Serializable,Cloneable{
    Singleton2;
    public Singleton2 getInstance(){
        return Singleton2;
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-03-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
设计模式学习心得之五种创建者模式
创建型模式的主要关注点是“怎样创建对象?”,它的主要特点是“将对象的创建与使用分离”。
Qiuner
2024/07/19
1070
设计模式学习心得之五种创建者模式
漫画:如何写出更优雅的单例模式?
上一次为大家介绍了单例模式的基本概念和几种实现方式,没看过的小伙伴们可以点击下面链接:
小灰
2022/07/05
4110
漫画:如何写出更优雅的单例模式?
Java 单例模式
import java.io.Serializable; // 修改后的单例模式 // 使用线程同步创建,防止进程切换重复创建线程, // 设置volatile关键字修饰,使读取singleton对象时能够获取最新状态 // 修改构造方法,防止反射创建对象 // 修改readResolve方法,防止反序列化对象时重新创建对象 // 重写克隆方法,防止对象克隆 public class Singleton2 implements Serializable, Cloneable { private
Dean0731
2020/05/11
9440
漫画:什么是单例模式?(整合版)
————— 第二天 ————— 单例模式第一版: public class Singleton { private Singleton() {} //私有构造函数 private static Singleton instance = null; //单例对象 //静态工厂方法 public static Singleton getInstance() { if (instance == null) {
程序猿DD
2018/02/01
1K0
漫画:什么是单例模式?(整合版)
单例模式
背景:我们在实现单例模式的时候往往会忽略掉多线程的情况,就是写的代码在单线程的情况下是没问题的,但是一碰到多个线程的时候,由于代码没写好,就会引发很多问题,而且这些问题都是很隐蔽和很难排查的。
大学里的混子
2019/04/02
4560
【设计模式面试】这几个问题你能回答几个?
1.首先谈设计模式的作用:经验的传承,提高了软件复用的水平,最终达到提高软件开发效率
用户4919348
2022/04/13
7740
【设计模式面试】这几个问题你能回答几个?
单例模式(下)---聊一聊单例模式的几种写法
在上一篇文章 单例模式(上)---如何优雅地保证线程安全问题中,我们采取了懒汉式写法来写我们的单例模式,并且重点讲解了懒汉式中线程安全的问题。这篇我们来讲讲单例模式中的其他几种写法。
帅地
2019/10/13
4580
面试官看完我手写的单例直接惊呆了!
单例模式应该算是 23 种设计模式中,最常见最容易考察的知识点了。经常会有面试官让手写单例模式,别到时候傻乎乎的说我不会。
烟雨星空
2020/09/30
7860
面试官看完我手写的单例直接惊呆了!
【设计模式】之单例模式
单例模式属于管理实例的创造型类型模式。单例模式保证在你的应用种最多只有一个指定类的实例。
青山师
2023/05/05
2920
设计模式【1.1】-- 你想如何破坏单例模式?
单例模式:是一种创建型设计模式,目的是保证全局一个类只有一个实例对象,分为懒汉式和饿汉式。所谓懒汉式,类似于懒加载,需要的时候才会触发初始化实例对象。而饿汉式正好相反,项目启动,类加载的时候,就会创建初始化单例对象。
秦怀杂货店
2020/12/26
7400
单例模式哪些不得不说的场景
这种实现并不是非常严谨,因为既然可以通过反射来获取构造函数来创建实例了,那么同样可以通过反射来获取到定义的flag,那么在利用反射调用构造函数之前,先获取到这个flag,将它值重置,那么再次调用构造函数就不会受到限制了,那这样实际上就没有起到防止重复创建对象的效果。这个另外一个实现方案
BUG弄潮儿
2020/12/02
3080
单例设计模式的正确写法(双重校验,静态内部类,枚举)
单例设计模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统系统中一个类只有一个实例。属于创建型模式
一缕82年的清风
2021/12/06
4530
设计模式(一):创建型之单例模式
使上面定义的单例类(Singleton)可以创建多个对象,枚举方式除外。有两种方式,分别是序列化和反射
Java微观世界
2025/01/21
870
三、单例模式详解
2、单例模式是非常经典的高频面试题,希望通过面试单例彰显技术深度,顺利拿到Offer的人群。
编程之心
2020/08/12
9280
三、单例模式详解
设计模式 | 单例模式及典型应用
单例是最常见的设计模式之一,实现的方式非常多,同时需要注意的问题也非常多。要内容:
小旋锋
2019/01/21
1K0
摸鱼设计模式——单例模式
饿汉式单例,无论是否使用,都直接初始化。其缺点则是会浪费内存空间。因为假如整个实例都没有被使用,那么这个类依然会创建,这就白创建了。
摸鱼-Sitr
2021/01/04
6820
摸鱼设计模式——单例模式
设计模式【1.2】-- 枚举式单例有那么好用么?
单例模式:是一种创建型设计模式,目的是保证全局一个类只有一个实例对象,分为懒汉式和饿汉式。所谓懒汉式,类似于懒加载,需要的时候才会触发初始化实例对象。而饿汉式正好相反,项目启动,类加载的时候,就会创建初始化单例对象。
秦怀杂货店
2020/12/26
5320
Java编程——单例模式的安全性
本文来说说怎么破坏一个单例,让你写的单例变成一个假的单例。当然,本文也会给出怎么进行防守的方法。
慕容千语
2019/06/11
8450
Java单例---反射攻击破坏单例和解决方法
Java单例—双重锁校验详解 Java单例—序列化破坏单例模式原理解析 Java单例—静态内部类 在静态内部类中引出了反射攻击的问题,本篇就来说一下反射攻击,废话不多少说上代码:
终有救赎
2023/10/22
3510
java设计模式之单例模式|单例模式之饿汉模式、懒汉模式、枚举方式|最详细的6种懒汉模式详解
概括一下ObjectOutputStream().readObject()的整个大致流程
小小鱼儿小小林
2022/10/06
1.7K0
java设计模式之单例模式|单例模式之饿汉模式、懒汉模式、枚举方式|最详细的6种懒汉模式详解
相关推荐
设计模式学习心得之五种创建者模式
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验