淺讀《大話設計模式》---------------4、考研求職兩不誤----開放-封閉原則
開放—封閉原則,是說軟件實體(類、模塊、函數等等)應該可以擴展,但是不可修改。[ASD]。這個原則有兩個特征:對于擴展是開放的,另一個是說對于更改是封閉的。
本原則經過作者精辟的闡述,馬上就讓我們在哲學上對一些問題的看法豁然開朗:看起來兩個完全抵觸的東西,利用擴展與封閉原則就能很好的解決。什么東西必須關閉,什么東西可以擴展?主權和業績是必須關閉修改的,但是制度卻是可以擴展開放的!難道這僅僅是一種計算機理論嗎?這簡直是處事之道!
如何應對變化?——除非你足夠強大,所有的人和事都無條件的服從你的,否則就需要面對無法預料的變化。事實上,對未來變化的估計和處理能力正是智慧的體現。好像離程序設計越來越遠了哦~言歸正傳,既然變化是無法避免的,那么對已有的機制進行對應的修改也是必須的(真的有“以不變應萬變”么?)。所以,“絕對的修改關閉是不可能的。無論模塊是多么的‘封閉’,都會存在一些無法對之封閉的變化。既然不可能完全封閉,設計人員必須對于他設計的模塊應該對那種變化封閉做出選擇。他必須先猜測出最有可能發生的變化種類,然后構造抽象來隔離那些變化[ASD]。”
“在我們最初編寫代碼時,假設變化不會發生。當變化發生時,我們就創建抽象來隔離以后發生的同類變化[ASD].”這里同時也反映了一個問題:要架構好的程序,我們需要善于分析程序的變化,善于總結善于抽象!當遇到問題了,我們應該思考這一類問題,并作出抽象改善程序的架構,提取出真正的封閉的和開放的部分。
大鳥的總結:“開放—封閉原則是面向對象設計的核心所在。遵循這個原則可以帶來面向對象技術所聲稱的巨大好處,也就是可維護、可擴展、可復用、靈活性好。開發人員應該僅對程序中呈現出頻繁變化的那些部分做出抽象,然而,對于應用程序中的每個部分都刻意地進行抽象同樣不是一個好主意。拒絕不成熟的抽象和抽象本身一樣重要[ASD]。”
很好,從本設計模式學到了很多很多,遠遠超過了程序設計的范疇!哈哈,考研的例子我覺得也很合適嘛。全力以赴是必須的,兩手準備也是一種靈活。只要別忘了自己當前的重點——就像快樂一樣,得到成功的目標是關閉的,但過程是開放的!