java - 什么是单例,用简单的英语?

标签 java design-patterns singleton

我已经在谷歌上搜索了大约一个小时,但我仍然不清楚单例是什么。谁能让我更清楚一点,也许可以发布一个代码示例?
我所知道的是,您只能拥有给定类的一个实例。但是你就不能为此使用静态类吗?
提前致谢!

最佳答案

简单通俗的英文版本是: Singleton Class 是一个只有一个实例的类。

But can't you just then use a static class for that?


不,这不是 Java 中的“静态”类。在 Java 中,“静态”类可以有多个实例,就像任何其他类一样。static关键字用于(用于类)表示嵌套类的实例不绑定(bind)到封闭类的特定实例。这意味着嵌套类中的表达式不能引用封闭类中声明的实例变量。
在 Java 1.5(又名 Java 5)之前,Java 中不支持单例设计模式。您只是用纯 Java 实现了它们;例如
    /** There is only one singer and he knows only one song */
    public class Singer {
        private static Singer theSinger = new Singer();
        private String song = "I'm just a singer";

        private Singer() { 
            /* to prevent instantiation */
        }

        public static Singer getSinger() { 
            return theSinger; 
        }

        public String getSong() {
            return song;
        }
    }
Java 1.5 引入了 enum可用于实现单例等的类型。
    /** There are two Singers ... no more and no less */
    public enum Singer {
        DUANE("This is my song"),
        RUPERT("I am a singing bear");
        
        private String song;

        Singer(String song) {
            this.song = song;
        }
        
        public String getSong() {
            return song;
        }
    }

1 - 当然,您需要了解“类”和“实例”的含义。由于这些词的编程/IT 英语含义与“普通英语”的含义不同,因此称其为“普通英语”描述有点牵强。另一方面,如果读者还没有理解“类”和“实例”的含义,那么他们就没有理解“单例”概念所需的基础知识,也没有理解其中的意义。

关于java - 什么是单例,用简单的英语?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14974016/

相关文章:

java - 创建 gui 来安装 java 应用程序的方法有哪些

.net - 在 MVVM 模型中,模型应该实现 INotifyPropertyChanged 接口(interface)吗?

java - Java Server 启动时服务运行的设计

android - 在 Android (Kotlin) 中处理单例清理的推荐方法是什么?

java - Singleton Bean UDP 监听器

java - 如何在点击警报后获得相同的JSP页面

java - Powermock : Mocked method still called

Java 小服务程序 : Cookies do not get deleted

c# - 如何抽象一个单例类?

design-patterns - 如何使用代理模式来替换单例?