单例模式

问题描述:设计单例模式的实现。

分析:单例模式,即要求在整个程序中,某个类有且只有一个实例对象。因为在有些时候,我们只需要类有一个对象就行,这个时候我们就可以把这个类采用单例模式实现,

        例如系统的一些对象,比如时间等对象就可以设计为单例模式。

        常见的单例模式有两种类型:饿汉模式和懒汉模式。具体区别如下:

                                                                                           饿汉模式:加载类时比较慢(因为要创建对象),运行时获取对象的速度比较快,线程安全

                                                                                           懒汉模式:加载类时比较快(因为不用创建对象),运行时获取对象的速度比较慢,线程不安全

         为了便于读者理解,我写出了如下Java代码,分别实现了饿汉模式和懒汉模式,读者可以结合代码理解:

           饿汉模式如下:

 1 /*
 2  * 饿汉模式的实现Singleton1
 3  */
 4 public class Singleton1 {
 5       //1.将构造方法私有化,不允许外部直接创建对象
 6     private Singleton1(){
 7         
 8     }
 9     //2.创建类的唯一实例
10     private static Singleton1 instance=new Singleton1();
11     //3.提供一个用于获取实例的方法
12     public static Singleton1 getInstance(){
13         return instance;
14     }
15     
16 }

       懒汉模式如下:

 1 /*
 2  * 懒汉模式的实现Singleton2
 3  */
 4 public class Singleton2 {
 5     //1.将构造方法私有化,不允许外部直接创建对象
 6     private Singleton2(){
 7         
 8     }
 9     //2.创建类的唯一实例
10     private static Singleton2 instance;
11     //3.提供一个用于获取实例的方法
12     public static Singleton2 getInstance(){
13         if(instance==null)
14             instance=new Singleton2();
15         return instance;
16     }
17 }

     测试代码如下:

 1 public class Test {
 2 
 3     public static void main(String[] args) {
 4         // TODO 自动生成的方法存根
 5       Singleton1 s1=Singleton1.getInstance();
 6       Singleton1 s2=Singleton1.getInstance();
 7       if(s1==s2){
 8           System.out.println("s1和s2是同一个实例");
 9       }
10       else System.out.println("s1和s2不是同一个实例");
11                 
12       Singleton2 s3=Singleton2.getInstance();
13       Singleton2 s4=Singleton2.getInstance();
14       if(s3==s4){
15         System.out.println("s3和s4是同一个实例");
16       }
17       else System.out.println("s3和s4不是同一个实例");
18     }
19 
20 }

输出结果为:

s1和s2是同一个实例
s3和s4是同一个实例

posted @ 2016-05-15 12:29  成功=坚持+努力+目标  阅读(209)  评论(0编辑  收藏  举报