Android設計模式之單例模式


定義

單例模式是一種常用的軟件設計模式。在它的核心結構中只包含一個被稱為單例的特殊類。通過單例模式可以保證系統中一個類只有一個實例 。

單例模式是設計模式中最簡單的形式之一。這一模式的目的是使得類的一個對象成為系統中的唯一實例。要實現這一點,可以從客戶端對其進行實例化開始。因此需 要用一種只允許生成對象類的唯一實例的機制,“阻止”所有想要生成對象的訪問。使用工廠方法來限制實例化過程。這個方法應該是靜態方法(類方法),因為讓 類的實例去生成另一個唯一實例毫無意義。

其又分為三種形式

餓漢式

//只有內部類可以為static。
public class SingIn{
    //在自己內部定義自己的一個實例,只供內部調用
    private static final SingIn instance = new SingIn();
    private SingIn(){
    }
    //這里提供了一個供外部訪問本class的靜態方法,可以直接訪問
    public static SingIn getInstance(){
        return instance;
    }
}

懶漢式

   /***
     * 一種常用的形式
     */
    private static SingIn instance = null; 
    public static synchronized SingIn getInstance() {         
      // 這個方法比上面有所改進,不用每次都進行生成對象,只是第一次  
      // 使用時生成實例,提高了效率!  
       if (instance == null)  
              instance = new SingIn();  
              return instance;  
    }  

雙重鎖式

 

//將同步內容下方到if內部,提高了執行的效率,不必每次獲取對象時都進行同步,只有第一次才同步,創建了以后就沒必要了。 
private static volatile SingIn instance=null;
 private SingIn (){
 
 }
 public static  SingIn getInstance(){
    if(instance==null){
      synchronized(SingIn .class){
      if(instance==null){
        instance=new SingIn ();
       }
      }
     }
    return instance;
  }

 

使用方式,直接調用getInstance()方法即可得到對象。

優點

實例控制:Singln 會阻止其他對象實例化其自己的 Singln 對象的副本,從而確保所有對象都訪問唯一實例

靈活性:因為類控制了實例化過程,所以類可以更加靈活修改實例化過程

缺點

開銷:雖然數量很少,但如果每次對象請求引用時都要檢查是否存在類的實例,將仍然需要一些開銷,可以通過使用靜態初始化解決此問題。

可能的開發混淆:使用 Singln 對象(尤其在類庫中定義的對象)時,開發人員必須記住自己不能使用 new 關鍵字實例化對象。因為可能無法訪問庫源代碼,因此應用程序開發人員可能會意外發現自己無法直接實例化此類。

對象的生存期:Singln 不能解決刪除單個對象的問題。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM