天天看小說

第52章

小A:“師兄,單體模式的實現要怎麼去實現?”

大B:“1、提供唯一的私有構造器,避免多個單體(Singleton)對象被創建,這也意味著該單體類不能有子類,那聲明你的單例類爲final是一個好主意,這樣意圖明確,並且讓編譯器去使用一些性能優化選項。如果有子類的話使用protected,protected的構造方法可以被其子類以及在同一個包中的其它類調用。私有構造器可以防止客戶程序員通過除由我們提供的方法之外的任意方式來創建一個實例,如果不把構造器聲明爲private或protected,編譯器會自動的創建一個public的構造函數。2、使用靜態域(staticfield)來維護實例。將單體對象作爲單體類的一個靜態域實例化。使用保存唯一實例的static變量,其類型就是單例類型本身。需要的話使用final,使其不能夠被重載。”

例如:privatestaticRutimecurrentRuntime=newRuntime();

大B:“3、使用靜態方法(StaticMethod)來監視實例的創建。”

(1)加載時實例化

例如:

publicclassSingleton{

privatestaticfinalSingletonSingletoninstance=newSingleton();

privateSingleton(){

}

publicstaticsynchronizedSingletongetInstance(){

returnSingletoninstance;

}

}

publicclassSingleton{

privatestaticfinalSingleton?Singletoninstance=newSingleton();

privateSingleton(){

}

publicstaticsynchronizedSingletongetInstance(){

returnSingletoninstance;

}

}

(2)使用時實例化(惰性初始化):這樣做可以在運行時收集需要的信息來實例化單體對象,確保實例只有在需要時才被建立出來。

例如:

publicclassSingleton{

privatestaticfinalSingletonSingletoninstance=null;

privateSingleton(){

//使用運行時收集到的需要的信息,進行屬性的初始化等操作。

}

publicstaticsynchronizedSingletongetInstance(){

if(Singletoninstance……null){

Singletoninstance=newSingleton();

}

returnSingletoninstance;

}

}

publicclassSingleton{

privatestaticfinalSingletonSingletoninstance=null;

privateSingleton(){

//使用運行時收集到的需要的信息,進行屬性的初始化等操作。

}

publicstaticsynchronizedSingletongetInstance(){

if(Singletoninstance……null){

Singletoninstance=newSingleton();

}

returnSingletoninstance;

}

}

大B:“4、單體對象的成員變量(屬性):即單體對象的狀態通過單例對象的初始化來實現成員變量的初始化。通過方法對單體對象的成員變量進行更新操作。”

例如:

publicclassSingleton{

privatestaticfinalSingletonSingletoninstance=null;

privateVectorproperties=null;

protectedSingleton(){

//使用運行時收集到的需要的信息,進行屬性的初始化等操作。

}

privatestaticsynchronizedvoidsyncInit(){

if(Singletoninstance……null){

Singletoninstance=newSingleton();

}

}

publicstaticSingletongetInstance(){

if(Singletoninstance……null){

syncInit();

}

returnSingletoninstance;

}

publicsynchronizedvoidupdateProperties(){

//更新屬性的操作。

}

publicVectorgetProperties(){

returnproperties;

}

}

publicclassSingleton{

privatestaticfinalSingletonSingletoninstance=null;

privateVectorproperties=null;

protectedSingleton(){

//使用運行時收集到的需要的信息,進行屬性的初始化等操作。

}

privatestaticsynchronizedvoidsyncInit(){

if(Singletoninstance……null){

Singletoninstance=newSingleton();

}

}

publicstaticSingletongetInstance(){

if(Singletoninstance……null){

syncInit();

}

returnSingletoninstance;

}

publicsynchronizedvoidupdateProperties(){

//更新屬性的操作。

}

publicVectorgetProperties(){

returnproperties;

}

}

第74章第100章第223章第146章第199章第127章第16章第154章第145章第101章第144章第228章第59章第1章第116章第104章第31章第227章第56章第126章第227章第1章第178章第189章第145章第95章第158章第104章第153章第4章第108章第75章第97章第63章第152章第31章第94章第20章第104章第2章第62章第41章第151章第30章第217章第176章第132章第167章第15章第123章第151章第49章第222章第98章第187章第55章第201章第119章第41章第63章第217章第174章第226章第62章第15章第205章第189章第93章第11章第64章第212章第102章第148章第185章第115章第158章第157章第223章第223章第138章第36章第208章第107章第78章第188章第64章第123章第137章第160章第4章第226章第95章第193章第192章第137章第59章第22章第78章第215章第218章
第74章第100章第223章第146章第199章第127章第16章第154章第145章第101章第144章第228章第59章第1章第116章第104章第31章第227章第56章第126章第227章第1章第178章第189章第145章第95章第158章第104章第153章第4章第108章第75章第97章第63章第152章第31章第94章第20章第104章第2章第62章第41章第151章第30章第217章第176章第132章第167章第15章第123章第151章第49章第222章第98章第187章第55章第201章第119章第41章第63章第217章第174章第226章第62章第15章第205章第189章第93章第11章第64章第212章第102章第148章第185章第115章第158章第157章第223章第223章第138章第36章第208章第107章第78章第188章第64章第123章第137章第160章第4章第226章第95章第193章第192章第137章第59章第22章第78章第215章第218章
主站蜘蛛池模板: 资兴市| 平塘县| 驻马店市| 五指山市| 洛川县| 龙川县| 固原市| 扶沟县| 长宁县| 宽城| 平舆县| 莆田市| 长垣县| 田阳县| 叙永县| 新疆| 达州市| 南乐县| 呼伦贝尔市| 舒兰市| 绥滨县| 呼玛县| 襄垣县| 信宜市| 禹城市| 綦江县| 莱州市| 阳高县| 烟台市| 镇安县| 云阳县| 凤台县| 邛崃市| 嘉黎县| 天长市| 阿克陶县| 陇西县| 延津县| 城市| 莎车县| 新龙县|