教育行業(yè)A股IPO第一股(股票代碼 003032)

全國咨詢/投訴熱線:400-618-4000

Java培訓(xùn)實(shí)戰(zhàn)教程之單例模式

更新時(shí)間:2015年12月29日13時(shí)34分 來源:傳智播客Java 瀏覽次數(shù):

  
一、 概念
單例模式是一種常用的軟件設(shè)計(jì)模式。通過單例模式可以保證系統(tǒng)中一個(gè)類只有一個(gè)實(shí)例而且該實(shí)例易于外界訪問,從而方便對實(shí)例個(gè)數(shù)的控制并節(jié)約系統(tǒng)資源。

二、顯然單例模式的實(shí)現(xiàn)的三個(gè)要素:
   1、某個(gè)類只能有一個(gè)實(shí)例;
   2、它必須自行創(chuàng)建這個(gè)實(shí)例
   3、是它必須自行向整個(gè)系統(tǒng)提供這個(gè)實(shí)例。

三、優(yōu)缺點(diǎn)
優(yōu)點(diǎn)
1、實(shí)例控制
   單例模式會阻止其他對象實(shí)例化其自己的單例對象的副本,從而確保所有對象都訪問唯一實(shí)例。
2、靈活性
    因?yàn)轭惪刂屏藢?shí)例化過程,所以類可以靈活更改實(shí)例化過程。
缺點(diǎn)
1、開銷
    雖然數(shù)量很少,但如果每次對象請求引用時(shí)都要檢查是否存在類的實(shí)例,將仍然需要一些開銷??梢酝ㄟ^使用靜態(tài)初始化解決此問題。
2、可能的開發(fā)混淆
   使用單例對象(尤其在類庫中定義的對象)時(shí),開發(fā)人員必須記住自己不能使用new關(guān)鍵字實(shí)例化對象。因?yàn)榭赡軣o法訪問庫源代碼,因此應(yīng)用程序開發(fā)人員可能忽略無法直接實(shí)例化此類。
3、對象生存期
   不能解決刪除單個(gè)對象的問題。

三、Singleton模式有三種常見形式:

第一種形式:懶漢式,也是常用的形式。

public class Student{
   //1、構(gòu)造函數(shù)私有化
   private Student(){
   }
   //2、在類中聲明一個(gè)Student對象
   private static Student student;
   //3、寫一個(gè)public static的方法 
   public static synchronized Student getStudent(){
      if (Student==null) {
         student=new Student();
      }
      return student;
   }
}
 

第二種形式:餓漢式


public class Student {
    //1、構(gòu)造函數(shù)私有化,防止外界直接實(shí)例化
      private Student(){    
      }
      //2、在類中實(shí)例化一個(gè)對象
      private static Student student=new Student();
      //3、寫一個(gè)public static的方法
      public static  Student getStudent(){   
          return student;
      }
}
 
第三種形式: 雙重鎖的形式。


public static   class Student{  
  
    private Student(){
       
    }
    private static Student student;
        public static Student getStudent(){
            if(student==null){
                synchronized(Student.class){
                    if(null==student){
                    student=new Student();
                }
            }
        }
        return student;
    }
}

本文版權(quán)歸傳智播客Java培訓(xùn)學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明作者出處。謝謝!
作者:傳智播客Java培訓(xùn)學(xué)院
首發(fā):http://www.xamj520.com/javaee 

0 分享到:
和我們在線交談!