上篇文章咱們講解了關於「設計方法」的原則,這篇文章談談關於「設計目標」的原則:開放-關閉原則 、里氏替換原則、迪米特法則。編程
開閉原則,簡單來講就是對擴展開放,對修改關閉。 它正式定義以下:設計模式
Software entities like classes,modules and functions should be open for extension but closed for modifications.markdown
一個軟件實體如類,模塊和函數應該對擴展開放,對修改關閉函數
按照開閉原則,咱們設計的類、模塊和函數(方法)能夠在不修改原來的代碼狀況下,擴展新的功能。學習
面向抽象(接口)編程,即便功能發生變化,也能夠經過實現新的接口完成。這樣既不須要修改代碼,也能夠擴展新功能。this
將相同的變化封裝到一個接口或抽象類中,將不一樣的變化封裝到不一樣的接口或抽象類中,不該該有兩個不一樣變化出如今同一個接口或抽象類中。編碼
里氏替換原則:若是對每個類型爲S的對象o1,都有類型爲T的對象o2,使得以T定義的全部程序P在全部的對象o1代換o2時,程序P的行爲沒有變化,那麼類型S是類型T的子類型spa
換一種說法就是: 全部引用基類(父類)的地方必須能透明地使用其子類的對象。更直接的說法,子類不能覆蓋父類非抽象方法。(若是子類覆蓋了父類方法,原來使用父類方法的地方替換成子類,程序的行爲確定會發生變化)設計
前面咱們重複提到了面向抽象編程,爲了知足開閉原則,在編碼時候,儘可能使用父(基)類。當行爲發生改變時,只須要實現不一樣的子類,在運行時再肯定具體的子類。若是父類覆蓋了子類的方法,那調用基類方法時,就會產生錯誤的結果。因此,里氏代換原則是實現開閉原則的重要方式之一code
迪米特法則又叫做最少知識原則(Least Knowledge Principle,LKP) 。
只與你的直接朋友交談,不跟「陌生人」說話(Talk only to your immediate friends and not to strangers)
迪米特原則的目的就是下降類之間的耦合,減小類之間的依賴,提供模塊獨立性(高聚合,低耦合)
迪米特法則要求與直接朋友交互,而直接朋友的條件是:
本篇文章主要介紹了設計目標相關的原則:開閉原則、里氏替換原則、迪米特原則。文中講的更多的是概念。以後學習的設計模式,能夠充分體現這些原則。