设计模式(五)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来声明。

  单例模式类图如下。

 

 

 

posted @ 2018-03-30 09:12  BigJunOba  阅读(128)  评论(0编辑  收藏  举报