你的位置:首页 > ASP.net教程

[ASP.net教程]java 设计模式之单例模式


--------2015-11-20 14:45:10

java设计模式之单例模式(Singleton)

     ---应用场合:只需要一个对象就可以了,例如一个朝代一个皇帝。

     ---作用:保证某个应用程序中某个实例有且只有一个。共同使用一个,节省资源。

     ---类型:饿汉模式,懒汉模式。

 

一.饿汉模式(类加载的时候就会实例化,线程安全)

 1 package com.sun.singleton; 2  3 //饿汉模式 4 public class Singleton { 5  6   //将构造函数私有化,不允许外部直接调用创建对象 7   private Singleton(){ 8      9   }10   //内部创建类的唯一实例,用private static 修饰(加载类时实例化一次,之后无论调用几次用的都是这一个实例)11   private static Singleton instance = new Singleton();12   13   //提供一个外部用于获取实例的方法,用 public static 修饰14   public static Singleton getInstance(){15     return instance;16   }17 18 }

 

二. 懒汉模式(比较懒,所以只有调用方法getInstance时候根据判断结果才会实例化,而且线程不安全)

package com.sun.singleton;//懒汉模式(线程不安全)public class Singleton2 {    //1.构造函数私有化,不允许外部直接调用  private Singleton2(){      }    //2.只是声明类的唯一实例,这时没有真正实例化,使用private static 修饰  private static Singleton2 instance;    //3.提供获取实例的方法,用public static修饰
// (1).解决线程不安全-------加同步(每个线程每次获取实例都要判断下锁,效率比较低) public static synchronized Singleton2 getInstance(){ if(instance == null){ return instance = new Singleton2(); } return instance; } //(2).解决线程不安全-----双重检查锁定(提高效率) public static Singleton2 getInstance2(){ /*如果第一个线程获取到了单例的实例对象,后面的线程再获取实例的时候不需要进入同步代码块中了*/ if(instance == null){ synchronized (Singleton2.class) { if(instance == null){ instance = new Singleton2(); } } } return instance; } }

 输出:

package com.sun.singleton;public class Main {  public static void main(String[] args) {        //实例化两次作比较测试    //饿汉式    Singleton s1= Singleton.getInstance();    Singleton s2= Singleton.getInstance();    if(s1==s2){      System.out.println("饿汉式是同一个实例");    }else{      System.out.println("饿汉式不是同一个实例");    }    //懒汉式    Singleton2 s3 = Singleton2.getInstance();    Singleton2 s4 = Singleton2.getInstance();    if(s3==s4){      System.out.println("懒汉式是同一个实例");    }else{      System.out.println("懒汉式不是同一个实例");    }  }}

 

 结果截图:

说明单例模式是同一个对象实例化是共享一个内存空间。

 

两者区别:

           饿汉模式:类加载的时候比较慢(加载时候实例化),但是运行时候比较快,线程安全。

           懒汉模式:类加载的时候比较快,但是运行时候比较慢(调用方法的时候实例化),线程不安全。

 

 

 

 新手的学习笔记:这是自己学习过程中的记录,方便自己回顾,好记性不如烂笔头,多多指教。

 

作者:艺至  

------------2015-11-20 16:42:51