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