/*
設(shè)計(jì)模式:對(duì)問(wèn)題行之有效的解決方式芥备,其實(shí)它是一種思想
1.單例設(shè)計(jì)模式
解決的問(wèn)題:就是可以保證一個(gè)類(lèi)在內(nèi)存中的對(duì)象的唯一性
必須對(duì)于多個(gè)程序使用同一個(gè)配置信息對(duì)象時(shí)屁使,就需要保證該對(duì)象的唯一性
如何保證對(duì)象的唯一性呢陆淀?
1.不允許其他程序用new創(chuàng)建該類(lèi)對(duì)象
2.在該類(lèi)創(chuàng)建一個(gè)本類(lèi)實(shí)例
3.對(duì)外提供一個(gè)方法讓其他程序可以獲取該對(duì)象幅恋。
步驟:
1.私有話該類(lèi)的構(gòu)造函數(shù)
2.通過(guò)new在本類(lèi)創(chuàng)建一個(gè)本類(lèi)的對(duì)象
3.定義一個(gè)公有的方法,將創(chuàng)建的對(duì)象返回
單例設(shè)計(jì)的內(nèi)存的理解:
內(nèi)存中:棧饲窿、堆拧抖、方法區(qū)(方法列表和靜態(tài)區(qū))
-
*/
class Single{//簡(jiǎn)稱餓漢式單例模式 --- 類(lèi)一加載就存在了 --- 開(kāi)發(fā)常用的 private static Single s = new Single();//成員變量私有化,以便可以控制 private Single(){}; public static Single getInstance(){ return s; } } public class SingleDemo { public static void main(String[] args){ Single s1 = Single.getInstance(); Single s2 = Single.getInstance(); System.out.println("s1"+s1+"\n"+"s2"+s2); TestSingle t1 = TestSingle.getInstance(); TestSingle t2 = TestSingle.getInstance(); t1.setNum(10); t2.setNum(20); System.out.println(t1.getNum()); System.out.println(t2.getNum()); } } class TestSingle{ private int num; //如果想要保證單例 private static TestSingle t = new TestSingle(); private TestSingle(){}; public static TestSingle getInstance(){ return t; } public void setNum(int num){ this.num = num; } public int getNum(){ return num; } }
/*
- 單例的另外一種表現(xiàn)形式: 簡(jiǎn)稱懶漢式加載的單例模式
- */
class Single2{ //類(lèi)加載進(jìn)來(lái)沒(méi)有對(duì)象免绿,只有調(diào)用了getInstance方法時(shí),才會(huì)創(chuàng)建對(duì)象
private static Single2 s = null;
private Single2(){};
public static Single2 getInstance()
{
if(s == null)
s = new Single2();
return s;
}
}