最近在學單例模式,一些想法和大家交流。
為什麼要有單例模式的?它在什麼情況下使用的?從單例模式的定義中我們可以看出——單例模式的使用自然是當我們的系統中某個物件只需要乙個例項的情況,例如:作業系統中只能有乙個任務管理器,操作檔案時,同一時間內只允許乙個例項對其操作等,既然現實生活中有這樣的應用場景,自然在軟體設計領域必須有這樣的解決方案了(因為軟體設計也是現實生活中的抽象),所以也就有了單例模式了。
說到單例模式,大家第一反應應該就是——什麼是單例模式?,從「單例」字面意思上理解為——乙個類只有乙個例項,所以單例模式也就是保證乙個類只有乙個例項的一種實現方法罷了,下面給出單例模式的乙個官方定義:確保乙個類只有乙個例項,並提供乙個全域性訪問點。要保證乙個類只有乙個例項,可以在類裡面建立自身的乙個私有例項,並提供乙個公共的方法來訪問他,所以這個類的建構函式必須是私有的,不允許外界直接來建立例項。大家請看下面**:
上面的例項在單執行緒的情況下是很好的,但是在多執行緒的情況下會出現乙個問題,當兩個執行緒同時執行到getinstance方法時,此時兩個執行緒判斷(uniqueinstance ==null)這個條件時都返回真,此時兩個執行緒就都會建立singleton的例項,這樣就違背了我們單例模式初衷了,既然上面的實現會執行多個執行緒執行,那我們對於多執行緒的解決方案自然就是使getinstance方法在同一時間只執行乙個執行緒執行就好了。可以參照下面一段**,這是懶漢模式的單例設計
這樣當第乙個執行緒執行到判斷instance是否存在時如果不存在則會上鎖,那麼下乙個執行緒將會掛起等待,很好的解決的多執行緒的問題。
還有一種是餓漢模式的單例設計:
internal class person共同學習,共同進步。static person p=new person();
public static person getinstance()
}
設計模式 單例模式
單例模式 singleton pattern 是乙個比較簡單的模式,其定義如下 ensure a class has only one instance,and provide a golbal point of acess to it.確保某乙個類只有乙個例項,而且自行例項化並且向整個系統提供這個...
設計模式 單例模式
class testsingleton static public function instance return self testsingleton private function clone public function setsinvar sinvar public function ...
設計模式 單例模式
單例模式的目的是保證類在系統中只被例項化一次,由該唯一的例項來為系統提供服務.單例模式主要用於保證服務的統一,比如獲取統一的編號服務,模仿oracle的序列生成等.但單例的使用需要謹慎,特別是在需要作負載均衡的地方,因為這種程式級的單例模式實際上只能保證在乙個應用中為單例.如果被多個應用載入,還是會...