为一个类创建唯一的对象并重复使用该对象

9
我希望创建一个类的唯一对象,并反复重用相同的对象。是否有有效的方法来实现这一点。
如何实现呢?

你具体想做什么?有示例类吗? - cowls
@AjayGopalShrestha 如果问题已经得到满意的回答,请将适当的答案标记为已接受。 - Steve
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;
    }
}

好的,那真是尴尬。 - Steve
不需要将整个方法同步。在这里可以看到示例:http://en.wikipedia.org/wiki/Singleton_pattern#Lazy_initialization - Sean Patrick Floyd
将类标记为final以防止其被扩展,这样做是否明智或过度? - shuttsy
这里更新了建议。对于初学者来说,现在可能有点复杂。 - Steve
3
在选择单例模式之前,请三思而后行。在大多数情况下,它们都是有害的。原文链接:https://dev59.com/j3M_5IYBdhLWcg3wn0lO。 - assylias
或者您可以使用一个包含三行的枚举。请参考我的答案。 - Peter Lawrey

2
用最简单的方法创建一个只有一个实例的类就是使用一个枚举
public enum Singleton {
    INSTANCE
}

你可以将这与Steve Taylor的答案进行比较,以了解其相对于其他替代方案的简单程度。
顺便说一下:我只建议您使用无状态单例。如果您想要有状态的单例,最好使用依赖注入。

2

通常使用Singleton模式来实现,但实际需要使用的情况非常少,这不是一个无害的决定。

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

关于为什么静态变量可能有问题,这篇文章也很有趣(Singleton是静态变量)。


0

这就是单例模式 - 基本上,你通过私有构造函数防止构造,并使用静态同步的getter获取实例,如果它不存在,则创建单个实例。

祝好,


0

有一个叫做单例模式的设计模式。如果你实现它,你将得到你所需要的。

点击这里查看不同的实现方式。


0

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


0

你正在寻找单例模式。阅读维基百科文章,你会找到如何在Java中实现它的示例。

也许你还想了解更多关于设计模式的知识,那我建议你阅读"Head First Design Patterns"这本书或者Erich Gamma等人所著的原始设计模式书籍(前者提供Java示例,后者则没有)。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接