在乙個應用中保證某個類只存在單一例項(示例:springmvc中的bean可以設定為singleton)
下面介紹幾種單例模式的實現:
public
class
singletonclass1
public
static singletonclass1 getsingleton()
public
static
void
main
(string[
] args)
}
把物件作為靜態變數,在宣告時就進行例項化。
私有化構造方法
外界通過靜態方法獲取物件例項
裝載時完成例項化,執行緒安全。
沒有懶載入,如果從來沒有使用過這個例項,會造成記憶體浪費。
public
class
singletonclass2
public
static singletonclass2 getsingleton()
public
static
void
main
(string[
] args)
}
把物件作為靜態變數。
私有化構造方法
將靜態變數的例項化放在靜態**塊中
外界通過靜態方法獲取物件例項
裝載時完成例項化,執行緒安全。
沒有懶載入,如果從來沒有使用過這個例項,會造成記憶體浪費。
public
class
singletonclass3
public
static singletonclass3 getsingleton()
return singletonclass;
}public
static
void
main
(string[
] args)
}
把物件作為靜態變數。
私有化構造方法
將靜態變數的例項化放在靜態方法中
外界通過靜態方法獲取物件例項
使用者獲取時會進行靜態變數是否為空判斷,空則例項化,非空返回引用
起到懶載入效果、不會浪費記憶體。
執行緒不安全,執行緒發生上下文切換時,可能會造成獲取到的類不同。
public
class
singletonclass4
public
static singletonclass4 getsingleton()
}return singletonclass;
}public
static
void
main
(string[
] args)
}
與上乙個相同,多乙個synchronized關鍵字
起到懶載入效果、不會浪費記憶體、執行緒安全。
多執行緒訪問時效率低。
public
class
singletonclass5
public
static singletonclass5 getsingleton()
}}return singletonclass;
}public
static
void
main
(string[
] args)
}
優點:起到懶載入效果、不會浪費記憶體、執行緒安全。
public
class
singletonclass7
static
class
innerclass
public
static singletonclass7 getsingleton()
public
static
void
main
(string[
] args)
}
將單例物件以靜態變數的形式放入靜態內部類中,宣告時即可例項化
外界通過外部類的靜態方法獲取內部靜態類中的單例物件
(外部類的載入不會引起內部類的載入)
起到懶載入效果、不會浪費記憶體、執行緒安全。
public
class
singletonclass6
static
enum singletonenum
public singletonclass6 getinstance()
}public
static singletonclass6 getinstance()
public
static
void
main
(string[
] args)
}
將單例物件放入列舉類最作為成員
優點:執行緒安全,還能防止反序列化時重新建立新的物件
設計模式 單例模式
單例模式 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的序列生成等.但單例的使用需要謹慎,特別是在需要作負載均衡的地方,因為這種程式級的單例模式實際上只能保證在乙個應用中為單例.如果被多個應用載入,還是會...