Roger Tu

          A simple boy living a simple life in every simple day...

             ::  :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            7 隨筆 :: 0 文章 :: 19 評論 :: 0 Trackbacks

          好的系統設計追求如下特性:

          •   可擴展性(Extensibility):新的功能或特性很容易加入到系統中來;
          •   靈活性(Flexibility):可以允許代碼修改平穩發生,對一處的修改不會波及到很多其他模塊;
          •   可插入性(Pluggability):可以很容易地將一個類或組件抽出去,同時將另一個有相同接口的類/接口加入進來。

             具有如上特性的系統才有真正的可維護性和可復用性。而可維護性和可復用性對一個持續接入新需求,現有功能逐步完善,新功能不斷豐富,版本不會終止的大型軟件產品來說至關重要。

             傳統的復用包括:代碼的copy復用,算法的復用,數據結構的復用。

             在面向對象領域,數據的抽象化、封裝、繼承和多態性是幾項最重要的語言特性,這些特性使得一個系統可以在更高的層次上提供可復用性。數據的抽象化和繼承關系使得概念和定義可以復用;多態性使得實現和應用可以復用;而抽象化和封裝可以保持和促進系統的可維護性。這樣,復用的焦點不再集中在函數和算法等具體實現細節上,而是集中在最重要的宏觀的業務邏輯的抽象層次上。復用焦點的倒轉不是因為實現細節的復用不再重要,而是因為這些細節上的復用往往已經做的很好(例如,很容易找到并應用成熟的數據結構類庫等),而真正沖擊系統的是其要實現業務的千變萬化。

             本質上說,如果說一個軟件的需求是永不變更或發展的,該軟件也就不需要任何設計,怎么編碼實現都行,只要需求滿足,性能達標。但事實上,軟件的本性就是不斷增強,不斷擴展,不斷變化的。我們可以控制指尖流淌出的每行代碼,但控制不了奉為上帝的用戶的需求。編碼結束,測試通過,用戶在使用過程中才發現原來的需求有問題,要變更需要或提出新需求,怎么辦?向用戶抗議:需求總在變,沒法做!?平抑心中的抱怨,加班加點大量的修改代碼,瘋狂的測試,依然是時間緊迫,心中沒底?抑或了然于胸:這個變更或新需求合理,系統很方便納入;于是坦然地和用戶協商下一個交付時間點?

             要使系統最大程度的適應需求的變更或新增,就必須在其要實現的宏觀業務邏輯的抽象復用上下功夫。而設計模式就是綜合運用面向對象技術和特性來提高業務邏輯可復用性的常用方法和經驗的提取和匯總。掌握23種設計模式的關鍵是理解它們的共通目的:使所設計的軟件系統在一般或特定(系統將來在特定點上需要擴展的可能性大)場景下,盡可能的對擴展開放,對修改關閉。即面對新需求或需求變更,容易開發獨立于既有代碼的新代碼接入到現有系統或對現有代碼做可控的少量修改,而不是在現有代碼基礎上做大量的增、刪、改。為了這一目的,23種設計模式貫穿了面向對象編程的基本原則:

          •    面向接口或抽象編程,而不是面向實現編程。
          posted on 2007-03-23 00:25 RogerTu 閱讀(2007) 評論(2)  編輯  收藏 所屬分類: Programming Thought

          評論

          # re: 設計模式基本思想 2007-03-23 03:34 喜來樂哈哈
          >> 盡量不要使用繼承,而是使用組合

          組合并不一定優于繼承,該用繼承的時候還是要用繼承的,特別是當滿足Substitution原理時。

          以前的OO界過于強調繼承,現在則過于強調組合。其實任何一個OO的系統都使用到繼承和組合。

            回復  更多評論
            

          # re: 設計模式基本思想 2009-05-23 19:14 cxf
          寫的不錯。  回復  更多評論
            


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 绩溪县| 深圳市| 郓城县| 五常市| 商都县| 五指山市| 城口县| 宝山区| 布拖县| 桃园市| 江西省| 西安市| 井陉县| 北辰区| 雷山县| 清新县| 英山县| 滦南县| 湾仔区| 观塘区| 比如县| 利川市| 怀安县| 会理县| 延寿县| 清涧县| 盱眙县| 自贡市| 原平市| 清河县| 井冈山市| 磐石市| 安岳县| 富阳市| 大姚县| 沙田区| 曲周县| 同江市| 霍邱县| 青冈县| 德州市|