設計模式入門(1)------單件(Singleton) (轉)

worldblog發表於2007-12-09
設計模式入門(1)------單件(Singleton) (轉)[@more@]

 

設計(1)------------單件(Singleton) 作者的話:  大家都說, C++難 , 難在那裡 , 難在他的面向OO部分. 而OO的設計, 又是OO的難點 . 設計模式描述了物件導向領域中經常出現的一類固定問題 ,和他比較固定的解決方法. 這樣 ,你就可以一次次的重用這種解決方法而不必作重複的勞動. 但是經典書籍<>比較晦澀, 想想我自己, 也是花費了許多時間去揣摩書中的含義. 現在精通設計模式的高手很多, 不過他們大都很忙. 我想, 我可以花去一些休息時間去為我們的眾多C++ fans去做一些有意義的事情. 我的水平不高, 文中必有一些錯誤, 歡迎高手們的指正. 我是個C++謎, 我經常去www.cuj.com ,在我的文章中, 你也會發現Jim Hyslop and Herb Su tter 的影子. 我希望把模式以淺顯易懂的方式介紹給大家. 如果你覺得這篇文章頗對你的胃口, 或是對你有一點幫助, hahaha, Its my pleasure. 也對我來一些鼓勵吧! 大家的鼓勵可是我寫作的動力呦! (^-^) --------------------------------------------------------------------------- " 喂喂喂, Grant 你在幹嗎? ", 這個傢伙整個上午都把他那隻派克筆轉過來轉過去, 搞得我心煩不已 . "你可不可以安靜點兒 ! ", 我說 .  " 我有個問題無法解決. " Grant 說, " 我設計了一個鐘錶類, 他需要一個唯一個時鐘來對 中的其他的一些其他的定時器進行協調. 我不想生成第二個時鐘! ", "那麼你怎麼做的呢? " 我饒有興趣的問. "我想使用全域性變數, 可是我沒有辦法讓我那該死的時鐘類只生成唯一的例項." 而且, 他接著說 "這個程式太大了, 並不是我一個人完成的. 如果只是我一個人 , 我可以記住只把時鐘類例項化一次, 可是, 我還有許多partner , 這並不是一個好方法 ,我想從設計上保證它! "  想想昨晚剛剛我剛看完設計模式上一個有關保證一個類僅有唯一例項的方法單件(Singleton ), 我不由得喜上心頭, 哈哈哈, 可以賣弄一下了! ".  " 你可以把構造定義成非公有的, 就可以保證不會生成例項了. " 我笑著說. " My god , 不會吧 , 非公有的建構函式 , 我可從來沒有想過………… 那麼我如何生成我的唯一的時鐘呢? 如果是非公有的建構函式中, 那麼我好象也沒有辦法對時鐘類例項化………  " "你可以定義一個對類操作的static型函式, 在這個函式中例項化不就行了麼! "  "我還是不太明白! ", Grant 眨了眨眼睛. 我提筆寫下以下的例子: class Singleton {  public :  static Singleton* Instance ( );  protected :  singleton ( ) ;   private :  static Singleton* _instance ; }; Singleton* Singleton::_instance = 0; Singleton* Singleton::Instance ( ) {  if(_instance == 0)  {  _instance = new Singleton;  }  return _instance; } " 這裡, Instance函式是static 型函式, 他可以對類進行操作, 而 _instance 是static型變數, 它只與類相關. Instance 使用惰性初始化, 它直到第一次被時才建立唯一的Sing letion例項. 而建構函式你可以定義為 private型, 這裡定義為 protect 型, 可以使你在子類的函式中重用它, 這樣, 如果有人想用Singleton去例項化物件, 就會得到一個編譯錯誤,  他只能透過Instance函式去方問唯一的物件, 明白了嗎? " " 你真是個天才, 這個想法太棒了, 如果我是MM的話, 我一定會嫁給你的! " " 嫁給我 , 還是算了吧 ! 快去寫你的程式. "  看著Grant 的背影, 我吐了吐舌頭 , 哈, 天才, 究竟是不是天才, 只有我自己知道!  -------------------------------------------------------------------------------- -------------------------------------- 大家看看題目, 設計模式入門, 記住, 這只是入門! 這裡介紹的十分淺顯. 如果你想要有提高的話, 還是看<>. (哈哈哈, 如果你仔細看的話, 你會發現作者抄襲了好多! )  作者: hyqryq


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-990008/,如需轉載,請註明出處,否則將追究法律責任。

相關文章