---------------------- ASP.Net+Android+IOS開發、.Net教育訓練、期待與您交流! ----------------------
設計模式是解決某一類問題最行之有效的方法。單例設計模式是解決一個類在記憶體隻存在一個對象,想要保證對象唯一。
Runtime()方法就是單例設計模式進行設計的。
一,如何保證對象唯一性呢?
思想:
1,不讓其他程式建立該類對象.
2,在本類中建立一個本類對象。
3,對外提供方法,讓其他程式擷取這個對象。
二,步驟:
1,因為建立對象都需要構造函數初始化,隻要将本類中的構造函數私有化,其他程式就無法再建立該類對象;
2,就在類中建立一個本類的對象;
3,定義一個方法,傳回該對象,讓其他程式可以通過方法就得到本類對象。
三,代碼展現:
1,私有化構造函數;
2,建立私有并靜态的本類對象;
3,提供一個方法可以擷取到該對象。
餓漢式:
class student {
private student(){}// //私有化構造函數。
private static student s=new student();//建立私有并靜态的本類對象。
public static student getstudent(){//提供一個方法擷取該對象
return s;
}
}
懶漢式:
class student {
private student(){}
private static student s=null;
public static student getstudent(){
if(s==null){
s=new student();
}
return s;
}
}
1.懶漢式和餓漢式的不同之處是:懶漢式的特點是延時加載;
2.懶漢式延時加載有問題,如果多線程通路時會出現安全問題;
3.解決安全問題的方法是:可以加同步來解決,而同步的方式有加同步代碼塊和同步函數,但是效率有些低,是以用雙重判斷的形式能解決效率問題。
4.用同步代碼塊解決:
class student {
private student(){}
private static student s=null;
public static synchronized student getstudent(){
if(s==null){
s=new student();
}
return s;
}
}
5. 用雙重判斷解決如下:
class student {
private student(){}
private static student s=null;
public static student getstudent(){
if(s==null){
synchronized(student.class){
if(s==null)
s=new student();
}
}
return s;
}
}
一般情況下定義單例時使用餓漢式;
---------------------- ASP.Net+Android+IOS開發、.Net教育訓練、期待與您交流! ----------------------詳細請檢視:http://edu.csdn.net