Java单例模式之饿汉模式与懒汉模式

单例模式是我们在开发软件的过程中经常用到的23中常用的java模式之一,主要的功能就是保证我们所使用的对象只有一个,这也在一方面减少了出错的可能性,增强了代码的健壮。单例模式一般来说有两种实现的方式,一种称之为饿汉模式,另一中成为懒汉模式。饿汉模式顾名思义,就是来者不拒,全盘搞定嘛,请看代码:

package Singleton;

public class eHan {

    //1、首先必须将构造函数声明为私有的,用来防止外部代码直接访问
    private eHan(){

    }
    //2、声明一个静态的类属的成员变量,也就是我们的实例
    static eHan Singleton1=new eHan();

    //3、使用一个获得器来帮助外界获得此类的唯一的实例,必须是类属的静态方法
    public static eHan getInstance() {
        // TODO Auto-generated method stub
        return Singleton1;
    }
}

另外一种懒汉模式就是指只有当我们要使用这个对象的实例的时候,才会去创建它,就好比一个懒汉,只有当他饿的实在受不了的时候,他才会去找吃的。请看下面的代码:

package Singleton;

public class lanHan {

    //1、第一步仍然是将构造函数声明为私有的
    private lanHan() {
        // TODO Auto-generated constructor stub
    }

    //2、继续声明一个静态的类属的成员变量、
    static lanHan Singleton=new lanHan();

    //3、也通过使用一个获取器来获得此类的唯一的一个实例,必须是类属的静态方法
    public static lanHan getInstance(){
        if(Singleton==null){
            Singleton=new lanHan();
        }
        return Singleton;
    }

}

只有实践才是检验真理的唯一标准,下面请看:

package Singleton;

public class Test {

     public static void main(String []args){
         //恶汉模式
         eHan e1=eHan.getInstance();
         eHan e2=eHan.getInstance();
         if(e1==e2){
             System.out.println("e1与e2是同一个实例");
         }else{
             System.out.println("e1与e2不是一个实例");
         }

         //懒汉模式
         lanHan l1=lanHan.getInstance();
         lanHan l2=lanHan.getInstance();
         if(l1==l2){
             System.out.println("l1与l2是同一个实例");
         }else{
             System.out.println("l1与l2不是一个实例");
         }

     }
}

接下来是运行结果:

e1与e2是同一个实例
l1与l2是同一个实例

由上我们不难看出,我们使用‘==’来进行判断对象在内存中的存储位置,而不是对象的内容的相等性,最后得出单例模式确实只是创建了一个实例,所以我们对其的操作,也只是对一个对象的操作,这样大大的减少了出错的可能性,是我们的代码更加健壮。代码比较简单,但是思想值得借鉴。

你可能感兴趣的:(java,Singleton,构造函数)