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