模擬場景:乙個王朝只能有乙個皇帝,臣子每天見的都是同乙個皇帝
emperor:
1package
com.zqz.dp.singleton;
2/**3*
@author
qin 場景:皇帝類,乙個王朝只能有乙個皇帝4*/
5public
class
emperor
9public
static
emperor getinstance()
12public
void dosomething()
15 }
minister
1package
com.zqz.dp.singleton;
2/**3*
@author
qin4
* 臣子類,每天都要參拜皇帝,那麼肯定參拜的是同乙個皇帝5*/
6public
class
minister 12}
13 }
在上面的操作中,對單例設計還有兩種說法,一種是餓漢式,一種是懶漢式。所謂的餓漢式就是在定義具體類例項的時候就立即進行了例項化的操作。而懶漢式就是說一開始不進行例項化,在進行具體操作的時候判斷是否進行了例項化,如果未進行例項化就進行例項化的操作。
修改emperor
1package
com.zqz.dp.singleton;
2/**3*
@author
qin 場景:皇帝類,乙個王朝只能有乙個皇帝4*/
5public
class
emperor
9public
static
emperor getinstance()
12public
void dosomething()
16 system.out.println("我是皇帝我最大");17}
18 }
單例模式的優點:
在具體的開發中建議使用餓漢式,因為懶漢式在高併發的時候可能會出現例項化兩次的時候,也就是說在高併發的時候,乙個執行緒在判斷發現該物件未例項化然後進行例項化的操作時(還未例項化),另乙個執行緒進來發現該物件沒例項化,所以也進行例項化的操作,這樣就導致了出現兩個例項的操作。
1、 因為只有乙個例項,所以減少了記憶體的開支。
2、 減少系統效能的開銷
3、 避免對資源的多重占用
4、 資源共享
1、 單例模式一般沒有介面,所以擴充套件麻煩。之所以沒有介面,是因為構造方法私有化,但介面或抽象類一般都不能直接進行例項化,要子類進行例項化的操作。
2、 對測試不利,未開發成單例,無法進行測試。
3、 與單一職責原則衝突。
1、 要求生成唯一的序列的環境;
2、 在整個專案中需要建立乙個共享資源點,即要資源共享;
3、 建立乙個物件需要消耗的資源過多;
4、 需要定義大量的靜態變數或者靜態方法的環境;
場景:乙個王朝出現兩個皇帝
emperor
1package
com.zqz.dp.prototype;
2import
j**a.util.arraylist;
3import
j**a.util.random;
4/**5*
@author
qin 場景:皇帝類,乙個王朝存在兩個皇帝6*/
7public
class
emperor 16}
17private emperor()
19private emperor(string name)
22public
static
emperor getinstance()
27public
void dosomething()
30 }
minister
1package
com.zqz.dp.prototype;
2/**3*
@author
qin4
* 臣子類,每天都要參拜皇帝,那麼肯定參拜的是同乙個皇帝5*/
6public
class
minister 13}
14 }
設計模式 單例Singleton
定義 確保某乙個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。使用場景 確保某個類有且只有乙個物件的場景,例如建立乙個物件需要消耗的資源過多,如要訪問 io 和資料庫等資源。以earth為例,簡單的單例模式可以寫成如下形式。public class earth public earth g...
單例設計模式(singleton)
單例設計模式的概念 作為物件建立模式,檔裡模式確保某個類只有乙個例項物件,而且自行建立例項並向整個系統提供這個例項。這個類稱為單例類!單例模式的提點 1,單例類只能有乙個例項 2,單例類的唯一例項必須自己建立 3,單例類必須向系統提供這個唯一的例項 餓漢單例類 public class eagers...
設計模式 單例Singleton
若是你希望自己寫的程式中的某個類只能有乙個相對應的例項,那麼這個時候就要用到單例模式了。單例模式是一種非常常見的設計模式,實現方法有好幾種,下面將一一介紹 1.懶漢式 public class singleton public static singleton getinstance return ...