8

我只想创建一个类的对象并一遍又一遍地重用同一个对象。有什么有效的方法可以做到这一点。

我怎样才能做到这一点?

4

8 回答 8

11
public final class MySingleton {
    private static volatile MySingleton instance;

    private MySingleton() {
        // TODO: Initialize
        // ...
    }

    /**
      * Get the only instance of this class.
      *
      * @return the single instance.
      */
    public static MySingleton getInstance() {
        if (instance == null) {
            synchronized (MySingleton.class) {
                if (instance == null) {
                    instance = new MySingleton();
                }
            }
        }
        return instance;
    }
}
于 2013-01-03T08:45:34.770 回答
2

这通常使用单例模式实现,但实际需要它的情况非常罕见,这不是一个无害的决定。

在做出决定之前,您应该考虑替代解决方案。

关于为什么静态变量可能是邪恶的另一篇文章也是一个有趣的阅读(单例是静态变量)。

于 2013-01-03T08:43:25.863 回答
1

创建具有一个实例的类的最简单方法是使用enum

public enum Singleton {
    INSTANCE
}

您可以将此与史蒂夫泰勒的答案进行比较,以了解它比替代方案简单得多。

顺便说一句:我只建议你使用无状态单例。如果你想要有状态的单例,你最好使用依赖注入。

于 2013-01-03T10:30:52.060 回答
0

那将是单例模式- 基本上你阻止使用私有构造函数进行构造,并使用静态同步 getter “获取”实例,如果它不存在,它将创建单个实例。

干杯,

于 2013-01-03T08:43:25.670 回答
0

有一种设计模式叫做 Singleton。如果你实施它,你会得到你所需要的。

看看这个,看看实现它的不同方法。

于 2013-01-03T08:43:36.500 回答
0

是的。它被称为单例类。您创建一个且唯一的实例并在整个代码中使用它。

于 2013-01-03T08:43:48.370 回答
0

您正在寻找单例模式。阅读 wikipedia 文章,您将找到如何在 Java 中实现它的示例。

也许您还想了解更多有关设计模式的信息,那么我建议您阅读“Head First Design Patterns”一书或Erich Gamma 等人的原始设计模式一书(前者提供 Java 示例,后者没有t)

于 2013-01-03T08:43:48.247 回答
0

您正在寻找的是Singleton Pattern

于 2013-01-03T08:44:21.450 回答