Singleton模式就是确保只生成一个实例的模式。这里有两个意思,即想确保任何情况下都绝对只有一个实例和想在程序上表现出“只存在一个实例”。
下面通过一个实例来说明这种设计模式。
1 package BigJunOba.bjtu.Singleton; 2 3 public class Singleton { 4 5 private static Singleton singleton = new Singleton(); 6 7 private Singleton() { 8 System.out.println("生成了一个实例"); 9 } 10 public static Singleton getInstance() { 11 return singleton; 12 } 13 }
Singleton类只会生成一个实例。主要方法是在声明实例域时,使用static将singleton初始化为Singleton的示例。初始化仅仅在类被加载时进行一次。由于Singleton的构造器是private的,是因为这样可以禁止从Singleton外部调用构造器,也就是说,不能从Singleton类以外的代码中调用构造器new Singleton()。
1 package BigJunOba.bjtu.Singleton; 2 3 public class Main { 4 5 public static void main(String[] args) { 6 System.out.println("Start."); 7 Singleton obj1 = Singleton.getInstance(); 8 Singleton obj2 = Singleton.getInstance(); 9 if(obj1 == obj2) { 10 System.out.println("是相同的示例"); 11 } else { 12 System.out.println("是不相同的示例"); 13 } 14 System.out.println("End."); 15 } 16 }
这里是用来观察是否只生成了一个实例,如果只调用了一次构造器,那么就只会打印出一句“生成了一个实例。”
Start. 生成了一个实例 是相同的示例 End.
通过输出结果我们可以看到,确实是只生成了一个实例。这个设计模式的关键就是构造器使用private来声明。
单例模式类图如下。
原文地址:https://www.cnblogs.com/BigJunOba/p/8674354.html
时间: 2024-11-06 03:41:46