单实例模式(singleton)
?
?單子模式保證一個(gè)application中就至多只有一個(gè)instance, ? 注意這里界定的是一個(gè)application, ? 而不是一個(gè)System.如果不是一個(gè)application的話(huà),就不能夠保證了。例如:在分布式環(huán)境下,雖然單服務(wù)器端實(shí)現(xiàn)了Singleton,但是多服務(wù)器端(System)就有可能不能保證是Singelton。
? ? ? 保證application中實(shí)現(xiàn)該模式的Singleton ? 類(lèi)至多只有一個(gè)instance, ? 可以在一定范圍內(nèi)更好地確定業(yè)務(wù)邏輯, ? 尤其是那些保證現(xiàn)實(shí)生活中application中只有一個(gè)的概念。如? 數(shù)據(jù)庫(kù)連接池就是一個(gè)典型;?
Singleton設(shè)計(jì)模式并不能保證節(jié)省資源,這是一點(diǎn)需要澄清的。如果要節(jié)省資源,大可不必使用Singleton設(shè)計(jì)模式,Singleton的設(shè)計(jì)目標(biāo)并不是為了節(jié)省資源,而且為了保證全局性的邏輯統(tǒng)一;?
Singleton設(shè)計(jì)模式與其他設(shè)計(jì)模式(如 ? Factory設(shè)計(jì)模式)的聯(lián)合使用基本上已經(jīng)成為了一種“普遍”的技巧,對(duì)Singleton的熟悉可以幫助我們?cè)诶斫馑斯ぷ魃虾拖嗷ソ涣魃蠋?lái)方便。
?
?
?
package cn.by.DesignModel.Singleton;
/**
?* 餓漢式
?*
?*/
public class SingleMod2 {
?//類(lèi)加載時(shí)就建立一個(gè)該類(lèi)對(duì)象,也是唯一的一個(gè)
?private static SingleMod2 single = new SingleMod2();
?//防止別人通過(guò)new關(guān)鍵字建立該類(lèi)對(duì)象,所以聲明為private
?private SingleMod2() {}
?
?
?/**
? * 得到一個(gè)該類(lèi)對(duì)象
? * synchronized 為多線(xiàn)程同步互斥訪(fǎng)問(wèn)
? * @return? 對(duì)象引用
? */
?public synchronized static SingleMod2 getInstance() {
??return single;
?}
?
?
?
?
package cn.by.DesignModel.Singleton;
/**
?* 懶漢式
?*
?*/
public class SingleMod {
?
?//因?yàn)橐祷匾粋€(gè)唯一的該類(lèi)對(duì)象,所以定義為靜態(tài)的
?private static SingleMod single;
??? //私有初始化,防止別人通過(guò)new產(chǎn)生一個(gè)該類(lèi)對(duì)象
?private SingleMod() {}
?
?/**
? * 獲取該類(lèi)的對(duì)象(唯一)
? * synchronized 是多線(xiàn)程同步訪(fǎng)問(wèn)的互斥
? * @return? 返回對(duì)象引用
? */
?public synchronized? static SingleMod getInstance() {
??//為空產(chǎn)生才產(chǎn)生一個(gè)該類(lèi)對(duì)象
??if(single == null)
???single = new SingleMod();??
??return single;
???
?}?
?
}
?
?
}
轉(zhuǎn)載于:https://blog.51cto.com/baiyan425/606715
總結(jié)
以上是生活随笔為你收集整理的单实例模式(singleton)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 基于DotNet构件技术的企业级敏捷软件
- 下一篇: HTML特殊字符集