單例模式是為了只構建乙個例項物件,single類中instance,在此類中只有這乙個例項物件。還有一點是建構函式私有化,為了防止在外部通過new產生物件。
package singleton;
public class singletontest
}
以上是客戶端測試案例,輸出true。
package singleton;
public class singleton
public static singleton getinstance()
}
餓漢式建立例項物件,在類載入的時候就已經建立了,效率不高,占用記憶體。還有一種餓漢式建立是使用static靜態**塊賴例項乙個物件。
package singleton;
public class singleton
private singleton()
public static singleton getinstance()
}
package singleton;
public class singleton
public static singleton getinstance()
return instance;
}}
以上方式屬於賴漢式建立例項物件,先將靜態物件賦值null,在靜態方法getinstance()中,先判斷是否為空,如果為空,new乙個物件,不為空的情況下直接返回instance例項。但在這種建立的情況下,會有執行緒不安全的情況發生,當乙個執行緒加入if語句塊建立例項物件的時候,其它執行緒也到了if判斷語句塊,在這種情況下,就會生產兩個例項物件。
解決的方法可以在方法前面加乙個synchronized關鍵字。
package singleton;
public class singleton
public static synchronized singleton getinstance()
return instance;
}}
使用synchronized,防止執行緒不安全,這樣做有乙個缺點是產生單例物件效率不高。兩個執行緒物件同時呼叫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的序列生成等.但單例的使用需要謹慎,特別是在需要作負載均衡的地方,因為這種程式級的單例模式實際上只能保證在乙個應用中為單例.如果被多個應用載入,還是會...