我正在尝试在我的播放应用程序中实现单例概念。但在进入单例概念之前,我们可以发现一个类被实例化,实例化了多少次
答案 0 :(得分:2)
最简单的方法是包含一个在构造函数中更新的线程安全的静态计数器:
public class CountedClass {
private static final AtomicInteger counter = new AtomicInteger();
public CountedClass() {
counter.incrementAndGet();
}
public static int getInstanceCount() {
return counter.get();
}
}
请注意,这不会显示当前活着的实例数,因为它不会在销毁时减少计数器。 可以覆盖finalize
来执行此操作,但我不会。
另请注意,这是不与单个长粉笔相同的东西。实现单例的推荐方法是使用单值枚举:
public enum Singleton
{
INSTANCE;
// Methods here
}
像这样或:
public final class Singleton {
// Thread-safe due to guarantees about initializers
private static final Singleton instance = new Singleton();
private Singleton() {
}
public static Singleton getInstance() {
return instance;
}
}
如果确实需要,你可以使用嵌套类型实现更长时间的初始化,但我很少发现值得复杂 - 上面的模式总是让我很好。
答案 1 :(得分:1)
单例模式的想法是确保没有人会创建除Class本身之外的实例。为此,我们将构造构造函数private
,以便没有人可以从外部实例化它。然后我们将维护一个私有变量,它保存类的实例,以及一个静态方法,如getInstance
,它将返回实例。可以找到完整的示例实现here。在线也有很多实现示例..
答案 2 :(得分:0)
public class Singleton {
private static Singleton instance = null;
private Singleton() {
}
public static Singleton getInstance() {
if(instance == null) {
instance = new Singleton();
}
return instance;
}
}
答案 3 :(得分:0)
保护实例化:
protected SingleClassName() {
//your stuff here
}
publiclay可访问的内容是:
public static SingleClassNameGetInstance() {
if (instance == null) {
instance = new SingleClassName();
}
return instance;
}
您只需要一个私有变量来检查,例如:
private static instance = null;
答案 4 :(得分:0)
线程安全的单身人士