1- 單一職責原則(srp)
單一職責原則(srp),就乙個類而言,應該僅有乙個引起他變化的原因。也就是說,不要把變化原因各不相同的職責放在一起,因為不同的變化會影響到不相干的職責。再通俗一點的說,不該你管的事情你不要管,管好自己的事情就可以了,多管閒事害了自己也害了別人。
在軟體設計中,如果乙個類的職責過多,就等於把這些職責耦合在一起,而乙個職責的變化可能會削弱和抑制這個類完成其他職責的能力。這樣的耦合容易導致脆弱的設計,當變化發生時,設計會遭受到意想不到的破壞。
軟體設計真正要做的許多內容,就是發現職責並把那些指責相互分離。如果多於乙個的動機去改變乙個類,那麼這個類就具有多餘乙個的職責,就應該要考慮類的職責分離。
2- 開放-封閉原則(the open-closed principle,簡稱ocp)
開放-封閉原則,或叫開閉原則,是說軟體實體(類、模組、函式等)應該是可以擴充套件的,但是不可修改。不修改的意思就是說,可以隨便增加新的類,但是不要修改原來的類。從這個角度去理解就好多了,其實這裡還是乙個隔離變化的問題。
這個原則的兩個特徵:乙個是對於擴充套件開放;另乙個是對於更改是封閉的。
我們在設計開發任何系統時,都不可能指望系統一開始就需求穩定,就不再變化。這是不現實的,也是不科學的想法。既然需求上有一定變化的,那麼如何在面對需求變化時,設計的程式可以相對容易的修改,不至於說,新的需求一來,就要把整個程式推到重來。怎樣的設計才能面對需求的改變卻可以保持相對穩定,從而使得系統可以在第乙個版本以後不斷推出新的版本呢?開放-封閉原則就是我們的答案。
在程式設計時,我們要時刻考慮盡量把類設計的足夠好,寫好了就不要去修改。如果有新的需求來了,我們增加一些類來完成新的需求,原來的**能不動就不動。
絕對的對修改關閉是不可能的,無論模組是多麼的封閉,都會存在一些無法對之封閉的變化,既然不能完全封閉,設計人員必須對他設計的模組應該對那種變化封閉作出抉擇,他必須事先猜測出最有可能發生變化的變化種類,然後構建抽象來隔離那些變化。
開放-封閉原則是物件導向設計的核心所在。遵循這個原則可以帶來物件導向技術所生成的巨大好處,也就是可維護、可擴充套件、可復用、靈活性好。開發原則應該對程式中呈現出頻繁變化的部分都做出抽象。然而,對於應用程式中的每部分都刻意的進行抽象同樣不是乙個好主意,拒絕不成熟的抽象和抽象本身一樣重要。
3- 依賴倒轉原則(dip:dependency inversion principle)
依賴倒轉原則:抽象不應該依賴於細節。細節應該依賴於抽象;高層不應該依賴於底層,兩者都應該依賴於抽象。說白了就是要針對介面程式設計,不要針對實現程式設計。抽象的東西才是最穩定的,也就是說,我們依賴的是他的穩定。
依賴倒轉其實可以說是物件導向設計的標誌,用哪種語言來實現並不重要。如果編寫者考慮的都是如何針對介面程式設計而不是針對細節程式設計,即程式中的所有依賴關係都是終止與抽象類或者介面,那就是物件導向的設計,反之就是過程化設計了。
4- 黎克特制代換原則
黎克特制代換原則(lsp):子型別必須能夠替換掉他的父型別。說白了就是乙個軟體實體如果使用的是乙個父類的話,那麼一定適用於其子類,而他察覺不出父類物件和子類物件的區別。也就是說,在軟體裡面,把父類都替換成他的子類,程式行為沒有變化。
有了黎克特制代換原則,才能使開放-封閉原則成為可能,正是由於子型別的可代換性才使得父型別的模組在無需修改的情況下擴充套件。
5- 介面隔離原則(isp)
介面隔離原則:不應該強迫客戶依賴於他們不用的方法。介面屬於客戶,不屬於他所在的類層次結構。再通俗點說,不要強迫客戶使用他們不用的方法,如果強迫客戶使用他們不用的方法,那麼這些客戶就會面臨由於這些不屬於的放啊飛的改變所帶來的改變。
6- 迪公尺特法則(lod)
迪公尺特法則(law of demeter)又叫最少知識原則(least knowledge principle):如果兩個類不彼此之間直接通訊,阿曼這兩個類就不應該發生直接的互相作用。如果其中乙個類需要呼叫另乙個類的某個方法的話,可以通過第三者**這個呼叫。
迪公尺特法則首先強調的前提是在類的結構設計上,每乙個類都應該盡量降低成員的訪問許可權。
迪公尺特法則其根本思想強調的是類之間的松耦合。類之間的松耦合越弱,越利於復用。乙個處於弱耦合的類被修改,不會對有關係的類造成波及。
7- 合成/聚合復用原則(composite/aggregate reuse principle)
合成/聚合復用原則經常又叫做合成復用原則(composite reuse principle),就是在乙個新的物件裡面使用一些已有的物件,使之成為新物件的一部分;新物件通過向這些物件的委派達到復用已有功能的目的。說白了就是要盡量使用合成/聚合,盡量不要使用繼承。
物件導向設計原則
oo原則 封裝變化 多用組合,少用繼承 針對介面程式設計,不針對實現程式設計 為互動物件之間的松耦合而努力 類應該對擴充套件開放,對修改關閉 依賴抽象,不要依賴具體類 只和朋友交談 別找我,我會找你 類應該只有乙個改變的理由 從設計原則到設計模式 針對介面程式設計,而不是針對實現程式設計 客戶無需知...
物件導向設計原則
物件設計原則 物件導向設計原則 物件導向設計的基石是 開 閉 原則。開一閉 原則講的是 乙個軟體實體應當對擴充套件開放,對修改關閉。這個規則說的是,在設計乙個模組的時候,應當使這個模組可以在不被修改的前提下被擴充套件。從另外乙個角度講,就是所謂的 對可變性封裝原則 對可變性封裝原則 意味著兩點 1 ...
物件導向設計原則
oo原則 封裝變化 多用組合,少用繼承 針對介面程式設計,不針對實現程式設計 為互動物件之間的松耦合而努力 類應該對擴充套件開放,對修改關閉 依賴抽象,不要依賴具體類 只和朋友交談 別找我,我會找你 類應該只有乙個改變的理由 從設計原則到設計模式 針對介面程式設計,而不是針對實現程式設計 客戶無需知...