單一職責原則(Single Responsibility Principle)——高內聚、低耦合
定義:不要存在多於一個致使類變動的緣由。通俗的說,一個類只負責一項職責,應該僅有一個引發它變化的緣由。
適用於:模塊、類、接口、方法。
優勢:
下降複雜度;提升可讀性,系統的可維護性;下降變動引發的風險。
建議:接口必定要作到單一職責,類的設計儘可能作到只有一個緣由引發變化。編程
開閉原則(Open Close Principle)—— 高內聚、低耦合
定義:一個軟件實體如類、模塊和函數應該對擴展開放,對修改關閉。
面對新需求,對程序的改動是經過增長新代碼進行的,而不是更改現有的代碼。
經典的話說:過去的事已成爲歷史,是不可修改的,由於時光不可倒流,但如今或明天計劃作什麼,是能夠本身決定(即擴展)的。
怎樣的設計才能面對需求的改變卻能夠保持相對穩定,從而使得系統能夠在第一個版本後不斷推出新的版本呢?開放-封閉。
在發生小的變化時,就及早去想辦法應對發生更大變化的可能。
等到發生變化時當即採起行動。建立抽象來隔離之後發生的同類變化。
開發人員應該對程序中頻繁變化的那部分作出抽象。
拒毫不成熟的抽象和抽象自己同樣重要。函數
里氏替換原則(Liskov Substitution Principle)——低耦合
定義:子類型必須可以替換掉它們的父類型。
里氏替換原則通俗的來說就是:子類能夠擴展父類的功能,但不能改變父類原有的功能。
子類能夠實現父類的抽象方法,但不能覆蓋父類的非抽象方法。
子類中能夠增長本身特有的方法。
若是不遵循里氏替換原則,代碼出現問題的概率會大大的增長。設計
依賴倒置原則(Dependence Inversion Principle)
定義:高層模塊不該該依賴底層模塊,兩者都應該依賴其抽象;抽象不該該依賴細節;細節應該依賴抽象;即針對接口編程,不要針對實現編程。
程序中全部的依賴關係都終止於抽象類或者接口,那就是面向對象的設計,反之那就是過程化的設計。
這個是開閉原則的基礎。
「面向接口編程」——OOD(Object-Oriented Design,面向對象設計)的精髓之一。
在實際編程中,咱們通常須要作到以下3點:
底層模塊儘可能都要有抽象類或接口,或者二者都有。
變量的聲明類型儘可能是抽象類或接口。
使用繼承時遵循里氏替換原則。對象
接口隔離原則(Interface Segregation Principle)——高內聚
含義:創建單一接口,儘可能細化接口,接口中的方法儘可能少。
爲各個類創建專用的接口。
在程序設計中,依賴幾個專用的接口要比依賴一個綜合的接口更靈活。
運用接口隔離原則,必定要適度,接口設計的過大或太小都很差。
設計接口的時候,只有多花些時間去思考和籌劃,才能準確地實踐這一原則。繼承
迪米特法則(Law Of Demeter)——鬆耦合
迪米特法則又叫最少知道原則,通俗的來說,就是一個類對本身依賴的類知道的越少越好。
也就是說,對於被依賴的類來講,不管邏輯多麼複雜,都儘可能地的將邏輯封裝在類的內部,對外除了提供的public方法,不對外泄漏任何信息。
迪米特法則還有一個更簡單的定義:只與直接的朋友通訊。
一句話總結就是:一個對象應該對其餘對象保持最少的瞭解。接口
組合/聚合複用原則(Composition/Aggregation Reuse Principle )——鬆耦合
儘可能使用合成和聚合,而不是集成來達到複用的目的。
該原則就是在一個新的對象裏面使用一些已有的對象,使之成爲新對象的一部分,新的對象經過向這些對象的委派達到複用已有功能的目的。ip