設計模式 單例模式(一)單例的幾種基本實現方式

2021-09-12 07:59:17 字數 1618 閱讀 4042

單例模式餓漢式單例

public class hungrysingleton 

public static hungrysingleton getinstance()

}

也可以將例項初始化的過程放在靜態**塊中。這兩種寫法都非常的簡單,也非常好理解,餓漢式適用在單例物件較少的情況。

懶漢式單例

懶漢式單例的特點是:被外部類呼叫的時候內部類才會載入,下面看懶漢式單例的簡單實現

懶漢式單例實現一:

public class lazy******singleton 

private static lazy******singleton lazy = null;

public static lazy******singleton getinstance()

return lazy;

}}

**測試:

exectorthread 類

public class exectorthread implements runnable

}

lazy******singletontest 類

public class lazy******singletontest 

}

public class lazy******singleton 

private static lazy******singleton lazy = null;

public synchronized static lazy******singleton getinstance()

return lazy;

}}

public class lazydoublechecksingleton 

public static lazydoublechecksingleton getinstance()}}

return lazy;

}}

這裡synchronized 只會在建立例項的時候枷鎖,之後lazy不等於null,就不會出現執行緒阻塞的情況。但是,用到 synchronized 關鍵字,總歸是要上鎖,對程式效能還是存在一定影響的。如何優化? 看如下 採用靜態內部類的實現方式:

public class lazyinnerclasssingleton 

//每乙個關鍵字都不是多餘的

//static 是為了使單例的空間共享

//保證這個方法不會被重寫,過載

public static final lazyinnerclasssingleton getinstance()

//預設不載入

private static class lazyholder

}

這種形式其實就是餓漢式+內部類,利用內部類用到才會載入的特性,解決了懶漢式不管用不用都載入帶來的問題。兼顧餓漢式的記憶體浪費,也兼顧 synchronized 效能問題。內部類一定是要在方法呼叫之前初始化,巧妙地避免了執行緒安全問題。

單例設計模式(餓漢單例設計模式 懶漢單例設計模式)

1.什麼是單例 單例的意思是乙個類永遠只存在乙個物件,不能建立多個物件。2.為什麼要用單例 開發中有很多的物件我們只需要乙個,例如虛擬機器物件,任務管理器物件 物件越多越佔記憶體,有時候只需要乙個物件就可以實現業務,單例可以節省記憶體空間。3.如何實現單例 單例的實現方式有 餓漢單例設計模式 通過類...

單例模式 單例模式

餓漢式 急切例項化 public class eagersingleton 2.宣告靜態成員變數並賦初始值 類初始化的時候靜態變數就被載入,因此叫做餓漢式 public static eagersingleton eagersingleton new eagersingleton 3.對外暴露公共的...

設計模式 一 單例模式

思路 1 如果其他程式能夠隨意用new建立該類物件,那麼就無法控制個數。因此,不讓其他程式用new建立該類的物件。2 既然不讓其他程式new該類物件,那麼該類在自己內部就要建立乙個物件,否則該類就永遠無法建立物件了。3 該類將建立的物件對外 整個系統 提供,讓其他程式獲取並使用。步驟 1 將該類中的...