摘要:?jiǎn)卫J酱_保一個(gè)特殊類的實(shí)例是獨(dú)一無(wú)二的(它是這個(gè)類的唯一實(shí)例),并且這個(gè)實(shí)例易于被訪問(wèn)。解決方案1)全局變量:一個(gè)全局變量使得一個(gè)對(duì)象可以被訪問(wèn),但它不能防止你實(shí)例化多個(gè)對(duì)象。因?yàn)槟愕娜魏未a都能修改全局變量,這將不可避免的引起更多調(diào)試的意外。換句話說(shuō),全局變量的狀態(tài)總是會(huì)出現(xiàn)一些問(wèn)題的。2)類構(gòu)造函數(shù)私有和類自身的靜態(tài)方法:讓類自身負(fù)責(zé)保存它的唯一實(shí)例(靜態(tài)變量)。這個(gè)類可以保證沒(méi)有其他實(shí)例可
單例模式
確保一個(gè)特殊類的實(shí)例是獨(dú)一無(wú)二的(它是這個(gè)類的唯一實(shí)例),并且這個(gè)實(shí)例易于被訪問(wèn)。
解決方案
1)全局變量:一個(gè)全局變量使得一個(gè)對(duì)象可以被訪問(wèn),但它不能防止你實(shí)例化多個(gè)對(duì)象。因?yàn)槟愕娜魏未a都能修改全局變量,這將不可避免的引起更多調(diào)試的意外。換句話說(shuō),全局變量的狀態(tài)總是會(huì)出現(xiàn)一些問(wèn)題的。
2)類構(gòu)造函數(shù)私有和類自身的靜態(tài)方法:讓類自身負(fù)責(zé)保存它的唯一實(shí)例(靜態(tài)變量)。這個(gè)類可以保證沒(méi)有其他實(shí)例可以被創(chuàng)建(通過(guò)截取創(chuàng)建新對(duì)象的請(qǐng)求) ,并且它可以提供一個(gè)訪問(wèn)該實(shí)例的方法(靜態(tài)方法)。這就是Singleton模式。(dubbo check 線程安全問(wèn)題等)
單件模式可以多個(gè)實(shí)例
單件模式并不是說(shuō)一個(gè)類只能只有一個(gè)實(shí)例。假設(shè)我們使用在一個(gè)web 請(qǐng)求或者進(jìn)程里面。一個(gè)用戶id對(duì)應(yīng)的某個(gè)類只能有唯一的實(shí)例。我們的User類,可以有多個(gè)實(shí)例,每個(gè)實(shí)例對(duì)應(yīng)一個(gè)uid. 實(shí)例列表注冊(cè)到map中以u(píng)id為key關(guān)聯(lián)起來(lái)。
原型模式
創(chuàng)建型模式一般是用來(lái)創(chuàng)建一個(gè)新的對(duì)象,然后我們使用這個(gè)對(duì)象完成一些對(duì)象的操作,我們通過(guò)原型模式可以快速的創(chuàng)建一個(gè)對(duì)象而不需要提供專門(mén)的new()操作就可以快速完成對(duì)象的創(chuàng)建,這無(wú)疑是一種非常有效的方式,快速的創(chuàng)建一個(gè)新的對(duì)象。
例子1:
孫悟空拔下一嘬猴毛,輕輕一吹就會(huì)變出好多的孫悟空來(lái)。
例子2:
下面是一個(gè)郵寄快遞的場(chǎng)景:
“給我寄個(gè)快遞?!鳖櫩驼f(shuō)。
“寄往什么地方?寄給……?”你問(wèn)。
“和上次差不多一樣,只是郵寄給另外一個(gè)地址,這里是郵寄地址……”顧客一邊說(shuō)一邊把寫(xiě)有郵寄地址的紙條給你。
“好!”你愉快地答應(yīng),因?yàn)槟惚4媪擞脩舻囊郧班]寄信息,只要復(fù)制這些數(shù)據(jù),然后通過(guò)簡(jiǎn)單的修改就可以快速地創(chuàng)建新的快遞數(shù)據(jù)了。
通過(guò)復(fù)制(克隆、拷貝)一個(gè)指定類型的對(duì)象來(lái)創(chuàng)建更多同類型的對(duì)象。這個(gè)指定的對(duì)象可被稱為“原型”對(duì)象,也就是通過(guò)復(fù)制原型對(duì)象來(lái)得到更多同類型的對(duì)象。即原型設(shè)計(jì)模式。在php的很多模板庫(kù),都用到clone。如smarty等。