您可以通过实现Singleton模式来创建类单例。如今单身人士课是基本要求。
为什么JVM在运行时不自行处理Singleton对象的创建?
通过像“Singleton”这样的标记接口,并在运行时由JVM创建一次对象实例。无论如何,如果Class没有扩展任何其他类,Java编译器会添加“extends Object”。类似的方法可以应用于Singleton案例。 这将节省大量的时间和开发工作以及围绕Singleton模式的各种实现的讨论。
1)同步的getInstance()
2)getInstance()中的同步块,而不是使整个方法同步
3)选项2,将singleInstance作为volatile成员
如果你需要在多个类中实现单例模式(不考虑将返回已传递的任何类的单例实例的SingletonPatternFactory类),这也将节省大量时间和重复工作。
答案 0 :(得分:5)
让我们看一下创建单例所需的所有步骤:
readResolve
和writeObject
的简单实现我遇到的大多数单身人士并不关心序列化,因此不需要第三步。这给你留下了两个非常非常简单的步骤。
public class Whatever extends WhateverElse {
public static final Whatever INSTANCE = new Whatever();
private Whatever() {}
}
它甚至是延迟加载的,因为在你访问类之前不会运行构造函数,而只能获取它的单例实例。我不知道你对“很多”的定义是什么,只要时间和发展努力,但我不认为这是繁重的。
答案 1 :(得分:3)
实施基本设计模式不是核心语言的责任,除非有令人信服的理由。设计模式来来去去 - 例如,单身模式被广泛认为是一种永远不应该使用的极其糟糕的模式。即使你决定使用它,你想要一个热切的单身人士吗?懒单身?如果由于某种原因实例化失败会发生什么?有很多看似微不足道的问题需要解决,但是在语言中添加这个功能并不是一个微不足道的改变。
通过自己实施,您可以获得所需的功能和行为。
答案 2 :(得分:2)
您可以使用枚举而不是单例模式 - 这不是很复杂:
public enum Singleton {
INSTANCE;
}
答案 3 :(得分:0)
Singletons有两个基本类别,即懒惰初始化和初始化初始化。
除了关于Singletons风味的整个论点之外,许多Java开发人员认为Singletons是坏的或反模式。这可能是目前维护Java规范的人之间的分歧。
最后,大多数模式都可以这样说。恕我直言,并没有非常需要一种语言来采用或支持任何特定的模式。
答案 4 :(得分:0)
您不需要Singleton接口,因为接口没有自己的行为。你会想要一个抽象类...那种。实际上,你会想要比抽象父母更强大的东西。您需要有一个私有构造函数(或调用私有构造函数并返回单个实例的私有实例化方法),必须在父级中定义的getInstance()方法中调用(违反作用域)。
您所建议的是在传统课堂系统之外工作的东西。也许它可以作为一个新的对象类型完成(类似于枚举不是一个类),但绝对不是标准的接口或类。