設計原則總結

設計原則
1. 單一職責原則(Single Responsibility Principle - SRP)
原文:There should never be more than one reason for a class to change.
譯文:永遠不該該有多於一個緣由來改變某個類。
理解:對於一個類而言,應該僅有一個引發它變化的緣由。說白了就是,不一樣的類具有不一樣的職責,各施其責。這就比如一個團隊,你們分工協做,互不影響,各作各的事情。
應用:當咱們作系統設計時,若是發現有一個類擁有了兩種的職責,那就問本身一個問題:能夠將這個類分紅兩個類嗎?若是真的有必要,那就分吧。千萬不要讓一個類乾的事情太多!程序員

2. 開放封閉原則(Open Closed Principle - OCP)
原文:Software entities like classes, modules and functions should be open for extension but closed for modifications.
譯文:軟件實體,如:類、模塊與函數,對於擴展應該是開放的,但對於修改應該是封閉的。
理解:簡言之,對擴展開放,對修改封閉。換句話說,能夠去擴展類,但不要去修改類。
應用:當需求有改動,要修改代碼了,此時您要作的是,儘可能用繼承或組合的方式來擴展類的功能,而不是直接修改類的代碼。固然,若是可以確保對總體架構不會產生任何影響,那麼也不必搞得那麼複雜了,直接改這個類吧。編程

3. 里氏替換原則(Liskov Substitution Principle - LSP)
原文:Functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it.
譯文:使用基類的指針或引用的函數,必須是在不知情的狀況下,可以使用派生類的對象。
理解:父類可以替換子類,但子類不必定能替換父類。也就是說,在代碼中能夠將父類所有替換爲子類,程序不會報錯,也不會在運行時出現任何異常,但反過來卻不必定成立。
應用:在繼承類時,務必重寫(Override)父類中全部的方法,尤爲須要注意父類的 protected 方法(它們每每是讓您重寫的),子類儘可能不要暴露本身的 public 方法供外界調用。
該原則由麻省理工學院的 Barbara Liskov 女士提出,她是美國第一位獲取計算機博士學位的女性,曾經也得到過計算機圖靈獎。架構

4. 最少知識原則(Least Knowledge Principle - LKP)
原文:Only talk to you immediate friends.
譯文:只與你最直接的朋友交流。
理解:儘可能減小對象之間的交互,從而減少類之間的耦合。簡言之,必定要作到:低耦合,高內聚。
應用:在作系統設計時,不要讓一個類依賴於太多的其餘類,需儘可能減少依賴關係,不然,您死都不知道本身怎麼死的。
該原則也稱爲;迪米特法則(Law of Demeter);,由 Ian Holland 提出。這我的不太願意和陌生人說話,只和他走得最近的朋友們交流。ide

5. 接口隔離原則(Interface Segregation Principle - ISP)函數

原文:The dependency of one class to another one should depend on the smallest possible interface.
譯文:一個類與另外一個類之間的依賴性,應該依賴於儘量小的接口。
理解:不要對外暴露沒有實際意義的接口。也就是說,接口是給別人調用的,那就不要去爲難別人了,儘量保證接口的實用性吧。她好,我也好。
應用:當須要對外暴露接口時,須要再三斟酌,若是真的沒有必要對外提供的,就刪了吧。一旦您提供了,就意味着,您未來要多作一件事情,何苦要給本身找事作呢。設計

6. 依賴倒置原則(Dependence Inversion Principle - DIP)
原文:High level modules should not depends upon low level modules. Both should depend upon abstractions. Abstractions should not depend upon details. Details should depend upon abstractions.
譯文:高層模塊不該該依賴於低層模塊,它們應該依賴於抽象。抽象不該該依賴於細節,細節應該依賴於抽象。
理解:應該面向接口編程,不該該面向實現類編程。面向實現類編程,至關於就是論事,那是正向依賴(正常人思惟);面向接口編程,至關於經過事物表象來看本質,那是反向依賴,即依賴倒置(程序員思惟)。
應用:並非說,全部的類都要有一個對應的接口,而是說,若是有接口,那就儘可能使用接口來編程吧。
 指針

相關文章
相關標籤/搜索