谁能提供一个单例模式的示例并解释为什么有必要吗?
在走单身路线之前,请重新考虑。您真的需要单身人士吗?如果您需要实现单例的方案,那是因为对它们的需求并没有真正表达出来。您最好不要仅在代码库中引入单例,因为遵循设计模式会很酷。
干净的代码讨论-全局状态和单例
一次还不够
表演者单身人士
但是,真正值得了解的是Dependency
Injection
。
现在,如果您真的想用Java实现单例,那么我将推荐Joshua
Bloch的“有效Java”实现方法:
public class Singleton
{
public static Singleton getInstance() {
return SingletonHolder.instance;
}
private Singleton() {}
private static final class SingletonHolder {
static final Singleton instance = new Singleton();
}
}
在JLS保证JVM不会初始化实例,直到有人呼叫getInstance();
最后要注意的是,在Java直至Java
5中
,Double
Checked锁定模式均已中断。Java
5内存模型使DCL模式线程安全,但是SingletonHolder
在最初的意图是性能优化的同时,它使其速度比类方法慢。
编辑:正如@Luno指出的那样,自从本书第二版以来,首选方法是:
从1.5版开始,存在第三种实现单例的方法。只需使用一个元素创建一个枚举类型:
// Enum singleton - the preferred approach
public enum Elvis {
INSTANCE;
public void leaveTheBuilding() { ... }
}
此方法在功能上与公共领域方法等效,除了它更简洁,免费提供序列化机制,甚至针对复杂的序列化或反射攻击,还提供了针对多重实例化的明确保证。尽管此方法尚未得到广泛采用,
但是单元素枚举类型是实现单例的最佳方法。
问题内容: 在java中如何实现一个单例设计模式?有哪些方法?那个更高效? 问题答案: 使用一个枚举: 实现可序列化单例的正确方法
本文向大家介绍JavaScript实现单例模式实例分享,包括了JavaScript实现单例模式实例分享的使用技巧和注意事项,需要的朋友参考一下 传统单例模式 保证一个类仅有一个实例,并提供一个访问它的全局访问点。 实现单例核心思想 无非是用一个变量来标志当前是否已经为某个类创建过对象,如果是,则在下一次获取该类的实例时,直接返回之前创建的对象,接下来我们用JavaScript来强行实现这个思路,请
本文向大家介绍简单讲解在Java编程中实现设计模式中的单例模式结构,包括了简单讲解在Java编程中实现设计模式中的单例模式结构的使用技巧和注意事项,需要的朋友参考一下 1. 模式介绍 模式的定义 确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。 模式的使用场景 确保某个类有且只有一个对象的场景,例如创建一个对象需要消耗的资源过多,如要访问 IO 和数据库等资源。 2. UML类图
本文向大家介绍c# 单例模式的实现,包括了c# 单例模式的实现的使用技巧和注意事项,需要的朋友参考一下 记一下学习单例模式的笔记: 单例就是要保证该类仅有一个实例。实现完全封闭的单例(外部不能new)其实就要两点要求: 全局访问:需要一个该类型的全局静态变量,每次获取实例时都要判断它是否null,不存在new,存在通过一个方法直接返回该值获取实例来保证对象唯一; 实例化控制:new实例不能
原始问题:程序读取旧配置文件(.ini)的输入 小节:漂移 田块:亩 价值:5
问题内容: 在Java中实现单例模式的有效方法是什么? 问题答案: 使用一个枚举: 约书亚·布洛赫(Joshua Bloch)在Google I / O 2008上的“ 有效的Java重新加载”演讲中解释了这种方法:链接到视频。另请参见他的演示文稿的幻灯片30-32(effective_java_reloaded.pdf): 实现可序列化单例的正确方法 编辑: “有效Java” 的在线部分说: “