物件導向七大設計原則
1、 開閉原則
2、 黎克特制替換原則
3、 單一職責原則
4、 介面隔離原則
5、 依賴倒置原則
6、 迪公尺特原則
7、組合/聚合復用原則
原則一:(srp:single responsibility principle)單一職責原則又稱單一功能原則
核心:解耦和增強內聚性(高內聚,低耦合)
描述:類被修改的機率很大,因此應該專注於單一的功能。如果你把多個功能放在同乙個類中,功能之間就形成了關聯,
改變其中乙個功能,有可能中止另乙個功能,這時就需要新一輪的測試來避免可能出現的問題。
原則二:開閉原則(ocp:open closed principle)
核心思想:對擴充套件開放,對修改關閉。即在設計乙個模組的時候,應當使這個模
塊可以在不被修改的前提下被擴充套件。
根據開閉原則,在設計乙個軟體系統模組(類,方法)的時候,應該可以在不修改原有的模組(修改關閉)的基礎上,能擴充套件其功能(擴充套件開放)。
擴充套件開放:
某模組的功能是可擴充套件的,則該模組是擴充套件開放的。軟體系統的功能上的可擴充套件性要求模組是擴充套件開放的。
修改關閉:
某模組被其他模組呼叫,如果該模組的源**不允許修改,則該模組修改關閉的。軟體系統的功能上的穩定性,持續性要求是修改關的。
原則三:黎克特制替換原則(lsp:liskov substitution principle)
核心:1.在任何父類出現的地方都可以用他的子類來替代(子類應當可以替換父類並出現在父類能夠出現的任何地方)
子類必須完全實現父類的方法。在類中呼叫其他類是務必要使用父類或接
口,如果不能使用父類或介面,則說明類的設計已經違背了lsp原則。
2.子類可以有自己的個性。子類當然可以有自己的行為和外觀了,也就是方
法和屬性
3.覆蓋或實現父類的方法時輸入引數可以被放大。即子類可以過載父類的方法,但輸入引數應比父類方法中的大,這樣在子類代替父類的時候,呼叫的仍然是父類的方法。即以子類中方法的前置條件必須與超類中被覆蓋的方法的前置條件相同或者更寬鬆。
4.覆蓋或實現父類的方法時輸出結果可以被縮小。
原則四:依賴倒轉原則(dip:dependence inversion principle)
別名:依賴倒置原則或依賴反轉原則
核心:要依賴於抽象,不要依賴於具體的實現
1.高層模組不應該依賴低層模組,兩者都應該依賴其抽象(抽象類或介面)
2.抽象不應該依賴細節(具體實現)
3.細節(具體實現)應該依賴抽象。
三種實現方式:
1.通過建構函式傳遞依賴物件
2.通過setter方法傳遞依賴物件
3.介面宣告實現依賴物件
原則五:介面分離原則(isp:inte***ce segregation principle)
核心思想:
不應該強迫客戶程式依賴他們不需要使用的方法。
介面分離原則的意思就是:乙個介面不需要提供太多的行為,乙個介面應該只提供一種對外的功能,不應該把所有的操作都封裝到乙個介面當中.
分離介面的兩種實現方法:
1.使用委託分離介面。(separation through delegation)
2.使用多重繼承分離介面。(separation through multiple inheritance)
原則六:合成復用原則(crp:composite reuse principle)
核心思想:
盡量使用物件組合,而不是繼承來達到復用的目的。該原則就是在乙個新的物件裡面使用一些已有的物件,
使之成為新物件的一部分:新的物件通過向這些物件的委派達到復用已有功能的目的。
復用的種類:
1.繼承
2.合成聚合
注:在復用時應優先考慮使用合成聚合而不是繼承
原則七:迪公尺特原則(lod:law of demeter)
又叫最少知識原則
核心思想:
乙個物件應當對其他物件有盡可能少的了解,不和陌生人說話。
(類間解耦,低耦合)意思就是降低各個物件之間的耦合,提高系統的可維護性;在模組之間只通過介面來通訊,
而不理會模組的內部工作原理,可以使各個模組的耦合成都降到最低,促進軟體的復用
注:1.在類的劃分上,應該建立有弱耦合的類;
2.在類的結構設計上,每乙個類都應當盡量降低成員的訪問許可權;
3.在類的設計上,只要有可能,乙個類應當設計成不變;
4.在對其他類的引用上,乙個物件對其它物件的引用應當降到最低;
5.盡量降低類的訪問許可權;
6.謹慎使用序列化功能;
7.不要暴露類成員,而應該提供相應的訪問器(屬性)
物件導向設計七大原則
嗯哼?其實對於這7大原則我也一臉懵,設計模式基本上就是在這幾個原則裡面做選擇,一種模式可能很好的滿足了一種原則,但對於其他原則可能就不能很好的滿足。背下來,老師如是說。恩,感覺在設計類的時候會下意識往這上面想,怎麼設計父類?介面還是抽象類?是包含引用還是依賴關係?還是比較有趣的,在幾種選擇裡面做平衡...
設計模式 物件導向設計七大原則
單一職責原則 類的職責要單一,不要將太多的職責放在乙個類中 開閉原則 軟體實體對擴充套件是開放的,但對於修改是關閉的,即在不修改乙個軟體實體的基礎上去擴充套件其功能 黎克特制代換原則 在軟體系統中,乙個可以接受基類物件的地方必然可以接受乙個子類物件 依賴倒轉原則 要對抽象層程式設計,不要針對具體類程...
OOP(物件導向程式設計)七大原則
對拓展開放,對修改關閉。也就是在原有的功能上進行拓展,盡量不要修改原有的功能。2.黎克特制替換原則 繼承要確保父類中的性質在子類中仍然使用。要面向介面程式設計,不要面向實現程式設計。抽象不依賴細節,細節不依賴抽象。控制類的粒度大小,將物件解耦 提高內聚性。也就是乙個方法盡可能完成一件事。5.介面隔離...