天天看點

面向對象設計6大原則

oop基本上有6大原則,而實際上都是互補的,也就是說一些原則需要利用另一些原則來實作自己。6大原則如下:

1) open-close principle(ocp),開-閉原則,講的是設計要對擴充有好的支援,而對修改要嚴格限制。這是最重要也是最為抽象的原則,基本上我們所說的reusable software既是基于此原則而開發的。其他的原則也是對它的實作提供了路徑。

2) liskov substituition principle(lsp),裡氏代換原則,很嚴格的原則,規則是“子類必須能夠替換基類(父類),否則不應當設計為其子類。”也就是說,子類隻能去擴充基類,而不是隐藏或覆寫基類。

3) dependence inversion principle(dip),依賴倒換原則,“設計要依賴于抽象而不是具體化”。換句話說就是設計的時候我們要用抽象來思考,而不是一上來就開始劃分我需要哪些哪些類,因為這些是具體。這樣做有什麼好處呢?人的思維本身實際上就是很抽象的,我們分析問題的時候不是一下子就考慮到細節,而是很抽象的将整個問題都構思出來,是以面向抽象設計是符合人的思維的。另外這個原則會很好的支援ocp,面向抽象的設計使我們能夠不必太多依賴于實作,這樣擴充就成為了可能,這個原則也是另一篇文章《design by contract》的基石。

4) interface segregation principle(isp),接口隔離原則,“将大的接口打散成多個小接口”,這樣做的好處很明顯,我不知道有沒有必要再繼續描述了,為了節省篇幅,實際上我對這些原則隻是做了一個小總結,如果有需要更深入了解的話推薦看《java與模式》,ms mvp的一:本巨作!^_^

5) 單一職責:一個類的功能盡量單一,降低耦合

6) law of demeter or least knowlegde principle(lod or lkp),迪米特法則或最少知識原則,這個原則首次在demeter系統中得到正式運用,是以定義為迪米特法則。它講的是“一個對象應當盡可能少的去了解其他對象”。也就是又一個關于如何松耦合(loosely-coupled)的法則。

好了,以上是6大原則(或法則)的介紹,對這些原則的深入研究正是如何得到設計模式的道路。在進行了深入了解後我們就可以開始看看設計模式了,設計模式正是對這些法則的應用,著名的設計模式有四人幫(gang of four,gof)的23個模式,除此之外還有很多其他的一些著名模式,大家可以慢慢研究。