在Java中使用单例模式

首先

我将总结我学到的内容,这是通过阅读介绍GoF设计模式的《增补改订版Java语言学习设计模式入门》得来的。

单例模式

独身主义是指

在中文中,将其翻译成「单例模式」,表示只存在于一个整体集合中的一张特定的纸牌,从而保证整个系统中只有一个实例存在。

角色出场

image.png

具体的例子

请以singleton类和执行类为例进行具体说明。

实现类

Singletonクラス

package singleton;

public class Singleton {
    // 1.staticフィールド(クラス変数)としてsingletonを定義
    private static Singleton singleton = new Singleton();

    // 2.privateなコンストラクタ
    private Singleton() {
        System.out.println("インスタンスの生成に成功しました");
    }

    // 3.singletonインスタンスの返却
    public static Singleton getInstance() {
        return singleton;
    }
}

以下是三个要点:
1.将singleton定义为私有的类变量。
2.构造函数被设置为私有的,无法从其他类中调用(无法使用new关键字)。
3.定义了返回singleton实例的getInstance()方法。

首先,会从外部类调用public的getInstance()方法。
如果是第一次调用,将初始化Singleton类,并在此时生成Singleton类的唯一实例。
之后,如果再次调用getInstance()方法,将返回已经生成的Singleton类的实例。
在构造函数中,会输出实例生成成功的信息,但通常是不必要的。

执行类

Mainクラス
getInstance()メソッドを2回呼び出し、同じインスタンスを取得していることを確認します。

package singleton;

public class Main {
    public static void main(String[] args) {
        System.out.println("***実行クラス開始***");
        Singleton obj1 = Singleton.getInstance();
        Singleton obj2 = Singleton.getInstance();
        if (obj1 == obj2) {
            System.out.println("obj1 is obj2");
        } else {
            System.out.println("obj1 is not obj2");
        }
        System.out.println("***実行クラス終了***");
    }
}

执行结果

运行Main.java的结果如下:
输出了obj1 is obj2,并且可以确认获取到了相同的实例。

***実行クラス開始***
インスタンスの生成に成功しました
obj1 is obj2
***実行クラス終了***

优点

通过使用Singleton模式,可以保证整个系统中只存在一个实例。
这样一来,就可以防止多个实例相互干扰,避免意外的错误发生。

综上所述

我学到了保证只有一个实例存在的Singleton模式。
如果您方便的话,请参考下面的示例代码。

    Singletonサンプルコード

此外,关于其他设计模式的详细信息已在下面整理,请您也参考。

    [随時更新]Javaでデザインパターンまとめ

資料來源

    増補改訂版 Java言語で学ぶデザインパターン入門
广告
将在 10 秒后关闭
bannerAds