單例模式(Singleton)
阿新 • • 發佈:2017-05-25
ech 單例模式 bsp 在線 創建 private 解決 餓漢式 dir 1.解決的問題:使得一個類只能夠創建一個對象。2.如何實現: ①私有化構造器,使得在類的外部不能調用該構造器
②在類的內部創建一個實例
③私有化該對象,通過公共的方法來調用(返回該對象) ④由於需要在類外部調用該方法(外部不能實例化該類對象),所以把該方法設置為static以便在類外部通過類名直接調用該方法,同時這個實例也應設置成靜態(靜態方法不能調用非靜態的對象返回)
餓漢式
懶漢式 (延遲創建)可能存在線程安全問題,參見互斥鎖
更深的討論: http://www.barryzhang.com/archives/521
②在類的內部創建一個實例
③私有化該對象,通過公共的方法來調用(返回該對象) ④由於需要在類外部調用該方法(外部不能實例化該類對象),所以把該方法設置為static以便在類外部通過類名直接調用該方法,同時這個實例也應設置成靜態(靜態方法不能調用非靜態的對象返回)
餓漢式
public class TestSingleton {
public static void main(String[] args) {
Singleton s1 = Singleton.getSingleton
();Singleton s2 = Singleton.getSingleton();
System.out.println(s1 == s2);// true
}
}
class Singleton {
private static Singleton s = new Singleton();
private Singleton() {
}
public static Singleton getSingleton() {
return s;
}
}
懶漢式 (延遲創建)可能存在線程安全問題,參見互斥鎖
public class TestSingleton1 {
public static void
main(String[] args) {Singleton1 s1 = Singleton1.getSingleton();
Singleton1 s2 = Singleton1.getSingleton();
System.out.println(s1 == s2);// true
for (int i = 0; i < args.length; i++) {
System.out.println(args[i]);
}
}
}
class Singleton1 {
private static Singleton1 s = null;
private Singleton1()
{}
public static Singleton1 getSingleton() {
if (s == null) {
s = new Singleton1();
}
return s;
}
}
更深的討論: http://www.barryzhang.com/archives/521
單例模式(Singleton)