当前位置: 首页 > 面试题库 >

在Java中实现单例模式

贺元明
2023-03-14
问题内容

谁能提供一个单例模式的示例并解释为什么有必要吗?


问题答案:

在走单身路线之前,请重新考虑。您真的需要单身人士吗?如果您需要实现单例的方案,那是因为对它们的需求并没有真正表达出来。您最好不要仅在代码库中引入单例,因为遵循设计模式会很酷。

干净的代码讨论-全局状态和单例

一次还不够

表演者单身人士

但是,真正值得了解的是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” 的在线部分说: “