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