最近系統的看了下設計模式,對於單例又有一些新的理解:
1.單例和靜態變數有什麼優缺點:
2.單例的各種方式:
(1).最簡單的模式(不考慮多執行緒)
public class singleton // 不允許外界呼叫建構函式public static singleton getinstance ()
return uniqueinstance;
}// 其他方法
}
(2).考慮多執行緒,避免創造出兩個物件,把getinstance方法設定成同步方法
public class singleton // 不允許外界呼叫建構函式public static synchronized singleton getinstance ()
return uniqueinstance;
}// 其他方法
}
這種方法有個問題:就是同步會降低效能,如果專案會頻繁的呼叫getinstance方法,而又十分的在意效能,那麼這樣不是乙個好方法,如果不是這樣,那麼這樣就可以滿足要求。
(3).對於多執行緒的改善:
a:使用「急切」建立例項,而不用延遲例項化的做法,適用於建立的物件並不是十分耗記憶體,即時很晚才用到或者壓根不用,完全不care。
public class singletonpublic static singleton getinstance ()
}
b:利用「雙重檢查加鎖」,在getinstance()中減少使用同步
public class singletonpublic static singleton getinstance () }}
return uniqueinstance;
}}
*考慮如果實現ios的「雙重檢查加鎖」。
3.其實可以說單例模式違反了「單一職責」的設計原則,因為不只要維護自己先關的功能,還要管理自己的例項化,但是這樣可以讓整體設計更簡單,所以還是那句話,設計原則只不過是要盡量的遵守,不是一定要百分之百不能違背。各種設計模式,都可以思考下,遵守了哪些設計原則,違反了哪些設計原則。
設計模式 單例模式
單例模式 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的序列生成等.但單例的使用需要謹慎,特別是在需要作負載均衡的地方,因為這種程式級的單例模式實際上只能保證在乙個應用中為單例.如果被多個應用載入,還是會...