在Java中使用单例模式
首先
我将总结我学到的内容,这是通过阅读介绍GoF设计模式的《增补改订版Java语言学习设计模式入门》得来的。
单例模式
独身主义是指
在中文中,将其翻译成「单例模式」,表示只存在于一个整体集合中的一张特定的纸牌,从而保证整个系统中只有一个实例存在。
角色出场
具体的例子
请以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言語で学ぶデザインパターン入門