设计模式Singleton模式

Posted BigJunOBa

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式Singleton模式相关的知识,希望对你有一定的参考价值。

  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来声明。

  单例模式类图如下。

 

 

 

以上是关于设计模式Singleton模式的主要内容,如果未能解决你的问题,请参考以下文章

图解设计模式-Singleton模式

浅谈JAVA设计模式之——单例模式(Singleton)

Singleton Pattern (单例模式)

特效设计也需要设计模式—— 单例模式(Singleton)Java

05-单例(Singleton)模式Ruby实现

剑指Offer对答如流系列 - 实现Singleton模式