• 欢迎访问 winrains 的个人网站!
  • 本网站主要从互联网整理和收集了与Java、网络安全、Linux等技术相关的文章,供学习和研究使用。如有侵权,请留言告知,谢谢!

图解设计模式(5):Singleton模式(只有一个实例)

设计模式 winrains 1年前 (2019-09-19) 31次浏览

确保只生成一个实例的模式称作Singleton模式。Singleton是指只含有一个元素的集合,转化为本模式只能生成一个实例,因此以Singleton命名。

1 Singleton模式中的角色

  • Singleton

只有Singleton这一个角色。Singleton角色中有一个返回唯一实例的static方法。该方法总是会返回同一个实例。

2 Singleton模式类图


“-”表示方法是private,”+”表示该方法为public,下划线表示该方法为static。

3 示例程序

3.1 类一览表

名字 说明
Singleton 只存在一个实例的类
Main 测试程序行为的类

3.2 类图

3.3 示例代码

Singleton类

只会生成一个实例,定义了static字段singleton,并将其初始化为Singleton类的实例。初始化行为仅在该类被加载时进行一次。
Singleton类的构造方法是private的,这是为了禁止从Singleton类外部调用构造函数。
getInstance方法是为了便于程序从Singleton类外部获取Singleton类唯一的实例。

public class Singleton {
    private static Singleton singleton = new Singleton();
    private Singleton() {
        System.out.println("生成了一个实例。");
    }
    public static Singleton getInstance() {
        return singleton;
    }
}

Main类

测试程序。

public class Main {
    public static void main(String[] args) {
        System.out.println("Start.");
        Singleton obj1 = Singleton.getInstance();
        Singleton obj2 = Singleton.getInstance();
        if (obj1 == obj2) {
            System.out.println("obj1与obj2是相同的实例。");
        } else {
            System.out.println("obj1与obj2是不同的实例。");
        }
        System.out.println("End.");
    }
}

运行结果

Start.
生成了一个实例。
obj1与obj2是相同的实例。
End.

摘自《图解设计模式》


版权声明:文末如注明作者和来源,则表示本文系转载,版权为原作者所有 | 本文如有侵权,请及时联系,承诺在收到消息后第一时间删除 | 如转载本文,请注明原文链接。
喜欢 (1)