這幾天瞄了幾本設(shè)計(jì)模式的書,沒有細(xì)看具體模式啦,而是老是琢磨那些深?yuàn)W無比的話。這些話經(jīng)常出現(xiàn)在計(jì)算機(jī)的書籍中,很有禪意,也有哲理。聽說,高手就喜歡寫點(diǎn)這樣的話。
還有就是細(xì)心體味了一下OO的設(shè)計(jì)原則,這些原則是凌駕于模式之上的,也就是更宏觀的原則。
其中,最高指導(dǎo)的一個(gè)就是“開-閉”原則。別的原則,里氏代換原則、依賴倒置原則、組合/聚合復(fù)用原則和迪米特法則都是為了達(dá)到“開-閉”原則而出現(xiàn)的規(guī)則。
這些原則告訴我很多東西,聚焦于一點(diǎn)就是要“面向抽象”來做一切事情。
分析對(duì)象的時(shí)候,要多分析設(shè)計(jì)“抽象”的概念,對(duì)象之間的聯(lián)系要多基于抽象的概念而不是具體,這樣具體才能能夠變化,這樣才是開閉。用我自己的話就是要“游走于 抽象”。
這里有一個(gè)我必須記住的就是,在封裝變化時(shí)候,多用聚合/組合,少用繼承。在封裝原子變化并且是同類型對(duì)象時(shí)才用繼承,別的都盡量用聚合/組合。而且盡量不要用多級(jí)繼承,多級(jí)繼承一般意味著有兩種變化脈絡(luò),可能的話,讓兩種變化脈絡(luò)獨(dú)立演化。很明顯,一獨(dú)立演化,又要聚合/組合了。
還有一個(gè)必須記住的是:運(yùn)用抽象以后,客戶端的使用發(fā)生了巨大的變化。不再是指那兒用那兒。而是要做更多的準(zhǔn)備工作,因?yàn)檫\(yùn)用抽象,本身就把具體“組合”的職責(zé)推遲到使用的階段。那誰使用,肯定是客戶端。所以,客戶端的使用要革新。要習(xí)慣用工廠,習(xí)慣把一系列的抽象定具體了,并按照一定方式“組合”起來用。而且,最終要善于用接口來調(diào)用方法。
用小飛推薦的一個(gè)工具畫了個(gè)圖,如下:

MARCO ZHANG 2006年2月27日7:18:57