<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    莊周夢蝶

    生活、程序、未來
       :: 首頁 ::  ::  :: 聚合  :: 管理

    singleton迷戀

    Posted on 2008-02-23 15:34 dennis 閱讀(2160) 評論(5)  編輯  收藏 所屬分類: 模式與架構
        自從知道singleton模式這把錘子是什么樣的之后,我就把很多小疙瘩也當成了釘子,時常想象偶頂著模式的光環揮舞著“萬能”錘子在代碼叢林中學習蘭博搏斗的光輝形象~~~~。昨天讀《重構與模式》的inline singleton一節,一句話點醒夢中人,singleton模式是“保證一個類僅有一個實例,并提供一個訪問它的全局訪問點”,原來——singleton也是全局變量啊。馬教主深刻地教育過我們:全局變量在被證明無害之前都是有害。偶大汗淋漓。看看迷戀singleton的幾種現象:
    1、僅僅在一個地方調用到了某個singleton實例,并且對這個實例的處理代碼也集中在這么一兩個地方,這樣的情況下你為什么要singleton?這里需要一個個全局訪問點嗎?我看你是為了singleton而singleton。

    2、我為了性能優化啊!singleton只有一個實例,減小了創建開銷。oh,我終于找到一個用singleton的充分理由了——性能。慢著,跟我讀高大師的名言:“不成熟的優化是萬惡之源”。你怎么知道singleton對象的重復創建是明顯影響了性能?現代jvm對“短命”對象的創建代價已經非常低了。不成熟的優化不僅可能是無效的,而且也給以后重構工作帶來了困難。除非有明顯數據證明(分析工具而來)某個對象的重復創建是對性能影響極大,否則所謂性能優化不能成為采用singleton模式的理由。

    3、有時候我們需要在系統的不同層次間傳遞一些共享信息,如果不采用singleton對象來提供這些共享信息,就得在調用的方法中重復地傳遞這些參數,這是個應用singleton模式的場景。但是,如果這些共享信息是可被修改的,或者說singleton對象不是無狀態的,如果還采用singleton模式,那么你就不得不在調用的方法中從single對象取出舊信息和存入新信息,這樣的重復代碼將遍布的到處都是,不僅僅引入了同步訪問的需要,而且出錯的風險大大提高。這種情況下你還將這些信息作為方法參數傳遞而不是采用singleton可能更為清晰和健壯。

        singleton不僅僅是“保證一個類僅有一個實例”(這僅僅是描述),更重要的是它是用來“提供全局訪問點”的(這才是它的功能),不要再迷戀這把錘子,好好利用這把錘子。

    題外話:腳本語言似乎更容易濫用全局變量,javascript里可以模擬命名空間,Ruby也可以模擬類似的機制。最近寫的一個比較大一點的Ruby腳本,用了幾個全局變量(都是數組)用于保存狀態數據,一開始沒有意識到這一點,導致對全局變量的訪問散落在好幾個腳本文件里,RDT下看起來紅通通的一片極其不爽。那么就重構吧——封裝數組重構,將對這些全局數組的訪問和修改操作統一到一個模塊,調用全局變量的地方都引用這個模塊,通過模塊去操作全局變量,代碼看起來清爽多了。



    評論

    # re: singleton迷戀  回復  更多評論   

    2008-02-23 16:05 by 魔域私服
    深有同感`

    # re: singleton迷戀  回復  更多評論   

    2008-02-23 16:46 by Jack.Wang
    QQ 11843121
    MSN(Email) wbjeasygo@163.com
    技術與管理群 47763528

    # re: singleton迷戀  回復  更多評論   

    2008-02-23 21:29 by Arbow
    哎呀,工作第一年的時候,用了N多singleton來做服務獲取,用起來便利,但是發現做單元測試的時候一個字慘啊

    # re: singleton迷戀  回復  更多評論   

    2008-02-23 21:44 by Matthewchen
    其實,全局變量,單例模式,和類的靜態成員是不一樣的。

    # re: singleton迷戀  回復  更多評論   

    2008-02-24 09:54 by dennis
    @Matthewchen
    貌似我沒說一樣
    主站蜘蛛池模板: 亚洲精品福利网泷泽萝拉| 美丽的姑娘免费观看在线播放 | 精品久久久久久亚洲中文字幕| 久久国产精品一区免费下载| 免费看美女被靠到爽| 国产精成人品日日拍夜夜免费| 国产真实伦在线视频免费观看| 99999久久久久久亚洲| 日韩国产欧美亚洲v片| 美女被免费喷白浆视频| 亚洲成A人片77777国产| 日本亚洲欧洲免费天堂午夜看片女人员| 男女污污污超污视频免费在线看| 免费无码一区二区三区蜜桃大| 亚洲av永久无码精品三区在线4 | 美女被爆羞羞网站在免费观看| 成年轻人网站色免费看| 亚洲AV成人影视在线观看| 久久WWW免费人成人片| 精品亚洲视频在线观看| 一区二区三区免费高清视频| 日韩免费高清一级毛片在线| 亚洲一区免费在线观看| 免费看国产精品3a黄的视频| 亚洲成人福利网站| 午夜毛片不卡免费观看视频| 亚洲成人高清在线观看| 热久久精品免费视频| 污污的视频在线免费观看| 亚洲一区二区高清| 久久aa毛片免费播放嗯啊| 又大又粗又爽a级毛片免费看| 亚洲自偷精品视频自拍| 99re在线这里只有精品免费| 无码乱人伦一区二区亚洲一| baoyu116.永久免费视频| 911精品国产亚洲日本美国韩国| 69式国产真人免费视频| 国产AV无码专区亚洲AV蜜芽| 又爽又黄无遮挡高清免费视频| fc2成年免费共享视频网站|