开源 企业版 高校版 私有云 模力方舟 AI 队友
代码拉取完成,页面将自动刷新
加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
已有帐号? 立即登录
文件
master
分支 (1)
master
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
项目仓库所选许可证以仓库主分支所使用许可证为准
master
分支 (1)
master
克隆/下载
克隆/下载
提示
下载代码请复制以下命令到终端执行
为确保你提交的代码身份被 Gitee 正确识别,请执行以下命令完成配置
初次使用 SSH 协议进行代码克隆、推送等操作时,需按下述提示完成 SSH 配置
1 生成 RSA 密钥
2 获取 RSA 公钥内容,并配置到 SSH公钥
在 Gitee 上使用 SVN,请访问 使用指南
使用 HTTPS 协议时,命令行会出现如下账号密码验证步骤。基于安全考虑,Gitee 建议 配置并使用私人令牌 替代登录密码进行克隆、推送等操作
Username for 'https://gitee.com': userName
Password for 'https://userName@gitee.com': # 私人令牌
master
分支 (1)
master
Design-Patterns
/
src
/
test
/
java
/
SingletonTest.java
Design-Patterns
/
src
/
test
/
java
/
SingletonTest.java
SingletonTest.java 4.99 KB
一键复制 编辑 原始数据 按行查看 历史
被水淹没 提交于 2021年09月18日 07:28 +08:00 . 工厂模式
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import src.singleton.*;
/**
* @author: chenbihao
* @create: 2021年9月6日
* @Description:
* @History:
*/
public class SingletonTest {
@Test
public void testHungrySingleton() {
HungrySingleton instance = HungrySingleton.getInstance();
HungrySingleton instance2 = HungrySingleton.getInstance();
Assertions.assertEquals(instance, instance2);
}
@Test
public void testLazySingleton() {
LazySingleton instance = LazySingleton.getInstance();
LazySingleton instance2 = LazySingleton.getInstance();
Assertions.assertEquals(instance, instance2);
}
@Test
public void testDoubleLockingSingleton() {
DoubleLockingSingleton instance = DoubleLockingSingleton.getInstance();
DoubleLockingSingleton instance2 = DoubleLockingSingleton.getInstance();
Assertions.assertEquals(instance, instance2);
}
@Test
public void testStaticInnerClassSingleton() {
StaticInnerClassSingleton instance = StaticInnerClassSingleton.getInstance();
StaticInnerClassSingleton instance2 = StaticInnerClassSingleton.getInstance();
Assertions.assertEquals(instance, instance2);
}
@Test
public void testEnumSingleton() {
EnumSingleton instance = EnumSingleton.INSTANCE;
EnumSingleton instance2 = EnumSingleton.INSTANCE;
Assertions.assertEquals(instance, instance2);
}
// 其他方法:
// 静态初始化:
// static{
// try{
// instance = new StaticBlockSingleton();
// }catch(Exception e){
// throw new RuntimeException("Exception occured in creating Singleton instance");
// }
// }
// 反射破坏、序列化
@Test
public void testThreadSingleton() {
// 线程内相同
ThreadSingleton instanceA1 = ThreadSingleton.getInstance();
ThreadSingleton instanceA2 = ThreadSingleton.getInstance();
Assertions.assertEquals(instanceA1, instanceA2);
Thread t = new Thread(() -> {
// 线程内相同
ThreadSingleton instanceB1 = ThreadSingleton.getInstance();
ThreadSingleton instanceB2 = ThreadSingleton.getInstance();
Assertions.assertEquals(instanceB1, instanceB2);
// 线程之间不同
Assertions.assertNotEquals(instanceA1, instanceB1);
});
}
// 集群单例
// 前面的单例实例都是属于 "进程唯一",而集群单例也就是 "进程间也唯一"
// 具体实现方法为:
//
// 把这个单例对象序列化并存储到外部共享存储区(比如文件、缓存等)。
// 进程在使用这个单例对象的时候,需要先从外部共享存储区中将它读取到内存,并反序列化成对象,然后再使用,使用完成之后还需要再存储回外部共享存储区。
// 为了保证任何时刻,在进程间都只有一份对象存在,一个进程在获取到对象之后,需要对对象加锁,避免其他进程再将其获取。在进程使用完这个对象之后,还需要显式地将对象从内存中删除,并且释放对对象的加锁。
@Test
public void testMultipleSingleton() {
MultipleSingleton instanceA1 = MultipleSingleton.getInstance(1);
MultipleSingleton instanceB1 = MultipleSingleton.getInstance(1);
MultipleSingleton instanceA2 = MultipleSingleton.getInstance(2);
MultipleSingleton instanceA3 = MultipleSingleton.getInstance(3);
Assertions.assertEquals(instanceA1, instanceB1);
Assertions.assertNotEquals(instanceA1, instanceA2);
Assertions.assertNotEquals(instanceA2, instanceA3);
Runtime.getRuntime();
}
// 实例:
// java.lang.Runtime#getRuntime()
/**
public class Runtime {
private static final Runtime currentRuntime = new Runtime();
public static Runtime getRuntime() {
return currentRuntime;
}
// Don't let anyone else instantiate this class
private Runtime() {}
......
}
*/
// Mybatis ErrorContext#instance()
// 这里的 ThreadLocal 相当于【线程唯一单例】里的 ConcurrentHashMap
/**
public class ErrorContext {
private static final String LINE_SEPARATOR = System.getProperty("line.separator","\n");
private static final ThreadLocal<ErrorContext> LOCAL = new ThreadLocal<ErrorContext>();
private ErrorContext stored;
private String resource;
private String activity;
private String object;
private String message;
private String sql;
private Throwable cause;
private ErrorContext() {
}
public static ErrorContext instance() {
ErrorContext context = LOCAL.get();
if (context == null) {
context = new ErrorContext();
LOCAL.set(context);
}
return context;
}
}
*/
}
Loading...
举报
举报成功
我们将于2个工作日内通过站内信反馈结果给你!
请认真填写举报原因,尽可能描述详细。
请选择举报类型
取消
发送
误判申诉

此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。

如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。

取消
提交

简介

设计模式的文章与示例及实例(从 github 备份过来,避免重大打击 /滑稽 )
取消

发行版

暂无发行版

贡献者

全部

语言

近期动态

不能加载更多了
编辑仓库简介
简介内容
主页
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Java
1
https://gitee.com/NIbbbbbbbb/Design-Patterns.git
git@gitee.com:NIbbbbbbbb/Design-Patterns.git
NIbbbbbbbb
Design-Patterns
Design-Patterns
master
点此查找更多帮助

搜索帮助

评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册

AltStyle によって変換されたページ (->オリジナル) /