面向對象的六原則一法則,而現實中只需要一個原則:老婆,我錯了

2020-12-06 掘客DIGGKR

1、 單一職責原則:一個類只做它該做的事情

單一職責原則想表達的就是」高內聚」,寫代碼最終極的原則只有六個字」高內聚、低耦合」,就如同葵花寶典或闢邪劍譜的中心思想就八個字」欲練此功必先自宮」。

所謂的高內聚就是一個代碼模塊只完成一項功能,在面向對象中,如果只讓一個類完成它該做的事,而不涉及與它無關的領域就是踐行了高內聚的原則,這個類就只有單一職責。

我們都知道一句話叫」因為專注,所以專業」,一個對象如果承擔太多的職責,那麼註定它什麼都做不好。這個世界上任何好的東西都有兩個特徵,一個是功能單一,好的相機絕對不是電視購物裡面賣的那種一個機器有一百多種功能的,它基本上只能照相;另一個是模塊化,好的自行車是組裝車,從減震叉、剎車到變速器,所有的部件都是可以拆卸和重新組裝的,好的桌球拍也不是成品拍,一定是底板和膠皮可以拆分和自行組裝的,一個好的軟體系統,它裡面的每個功能模塊也應該是可以輕易的拿到其他系統中使用的,這樣才能實現軟體復用的目標。

2、開閉原則:軟體實體應當對擴展開放,對修改關閉

在理想的狀態下,當我們需要為一個軟體系統增加新功能時,只需要從原來的系統派生出一些新類就可以,不需要修改原來的任何一行代碼。

要做到開閉有兩個要點:

①、抽象是關鍵,一個系統中如果沒有抽象類或接口系統就沒有擴展點;

②、封裝可變性,將系統中的各種可變因素封裝到一個繼承結構中,如果多個可變因素混雜在一起,系統將變得複雜

3、依賴倒轉原則:面向接口編程

該原則說得直白一些就是聲明方法的參數類型、方法的返回類型、變量的引用類型時,儘可能使用抽象類型而不用具體類型,因為抽象類型可以被它的任何一個子類型所替代。

4、裡氏替換原則:任何時候都可以用子類型替換掉父類型

關於裡氏替換原則的描述,Barbara Liskov女士的描述比這個要複雜得多,但簡單的說就是能用父類型的地方就一定能使用子類型。

裡氏替換原則可以檢查繼承關係是否合理,如果一個繼承關係違背了裡氏替換原則,那麼這個繼承關係一定是錯誤的,需要對代碼進行重構。例如讓貓繼承狗,或者狗繼承貓,又或者讓正方形繼承長方形都是錯誤的繼承關係,因為你很容易找到違反裡氏替換原則的場景。

需要注意的是:子類一定是增加父類的能力而不是減少父類的能力,因為子類比父類的能力更多,把能力多的對象當成能力少的對象來用當然沒有任何問題。

5、接口隔離原則:接口要小而專,絕不能大而全

臃腫的接口是對接口的汙染,既然接口表示能力,那麼一個接口只應該描述一種能力,接口也應該是高度內聚的。

例如,琴棋書畫就應該分別設計為四個接口,而不應設計成一個接口中的四個方法,因為如果設計成一個接口中的四個方法,那麼這個接口很難用,畢竟琴棋書畫四樣都精通的人還是少數,而如果設計成四個接口,會幾項就實現幾個接口,這樣的話每個接口被復用的可能性是很高的。

Java中的接口代表能力、代表約定、代表角色,能否正確的使用接口一定是編程水平高低的重要標識。

6、合成聚合復用原則:優先使用聚合或合成關係復用代碼,儘量不要使用繼承。

要說明的是,即使在Java的API中也有不少濫用繼承的例子,例如Properties類繼承了Hashtable類,Stack類繼承了Vector類,這些繼承明顯就是錯誤的,更好的做法是在Properties類中放置一個Hashtable類型的成員並且將其鍵和值都設置為字符串來存儲數據,而Stack類的設計也應該是在Stack類中放一個Vector對象來存儲數據。

記住:任何時候都不要繼承工具類,工具是可以擁有並可以使用的,而不是拿來繼承的。

7、迪米特法則:迪米特法則又叫最少知識原則,一個對象應當對其他對象有儘可能少的了解

迪米特法則簡單的說就是如何做到"低耦合",門面模式和調停者模式就是對迪米特法則的踐行。

對於門面模式可以舉一個簡單的例子,你去一家公司洽談業務,你不需要了解這個公司內部是如何運作的,你甚至可以對這個公司一無所知,去的時候只需要找到公司入口處的前臺美女,告訴她們你要做什麼,她們會找到合適的人跟你接洽,前臺的美女就是公司這個系統的門面。

再複雜的系統都可以為用戶提供一個簡單的門面,Java Web開發中作為前端控制器的Servlet或Filter不就是一個門面嗎,瀏覽器對伺服器的運作方式一無所知,但是通過前端控制器就能夠根據你的請求得到相應的服務。

調停者模式也可以舉一個簡單的例子來說明,例如一臺計算機,CPU、內存、硬碟、顯卡、音效卡各種設備需要相互配合才能很好的工作,但是如果這些東西都直接連接到一起,計算機的布線將異常複雜,在這種情況下,主板作為一個調停者的身份出現,它將各個設備連接在一起而不需要每個設備之間直接交換數據,這樣就減小了系統的耦合度和複雜度。

迪米特法則用通俗的話來將就是不要和陌生人打交道,如果真的需要,找一個自己的朋友,讓他替你和陌生人打交道。

歡迎朋友們關注轉發點讚,謝謝~~

相關焦點

  • 面向對象六大原則
    這篇文章主要講的是面向對象設計中,應該遵循的六大原則。只有掌握了這些原則,才能更好的理解設計模式。 我們接下來要介紹以下6個內容。也就是說一個類應該只負責一件事情。如果一個類負責了方法M1,方法M2兩個不同的事情,當M1方法發生變化的時候,我們需要修改這個類的M1方法,但是這個時候就有可能導致M2方法不能工作。這個不是我們期待的,但是由於這種設計卻很有可能發生。所以這個時候,我們需要把M1方法,M2方法單獨分離成兩個類。讓每個類只專心處理自己的方法。
  • 設計原則總結:最全的互動設計原則和理論匯總
    文章包括:格式塔心理學原則、尼爾森可用性原則、尼爾森F視覺模型、Heuristic Evaluation十原則、費茨定律、席克定律、7+2法則、2秒原理、2/8法則、3次點擊法則、界面黃金8法則、jakob nielson原則、KANO模型、0123簡單法則、MVP法則、嬰兒鴨綜合症、包浩斯理念、泰思勒定律、防錯原則、奧卡姆剃刀原理、maya法則、信噪比法則、序列效應、功能可見性原則、
  • 《人生十二法則》:人生需要原則,生活需要秩序
    在《十二法則》一書中,彼得森運用當代腦神經科學,哲學中的精粹,以及心理學等各方面知識,進行梳理總結出了十二法則,他以講故事的形式將法則更好地向讀者說明,告訴人們制定人生法則並不會限制生活的自由,反而因為法則,你會清晰堅定地知道自己的方向,法則推動我們前進,讓我們生活更加充實和自由。下面讓我們更深入地去了解這本書,學習如何將書中的法則與自己的生活相結合。
  • 六大設計原則超詳細介紹(再不理解你打我)
    以上把一個臃腫的接口拆分為三個獨立的接口所依賴的原則就是接口隔離原則。接口隔離原則是對接口進行規範約束。迪米特法則迪米特法則(LoD)也叫最少知道法則:一個對象應該對其他對象有最少的了解。1.只和朋友交流迪米特法則還有一個英文解釋是:Only talk to your immediate friends(只和直接的朋友交流)。每個對象都必然會與其他對象耦合,兩個對象的耦合就成為朋友關係。下面我們通過體育課老師讓班長清點女生人數為例講解。
  • 你需要有自己的原則——《原則》讀後感
    這本書分享了達利歐自己40多年的生活和工作的原則,可以說是他的成功學。大大小小的原則有上百條,濃縮了他一生的人生智慧和管理經驗。 這本書對我最大的意義是啟發理性思考,根據我們的現實情況,應該建立自己的原則!書中的核心觀點是用絕對理性來認識世界,指導行動。
  • 架構師必須知道的架構設計原則
    雖然仍是假期,但也建議你多花點時間讀一讀這些真言。 寫在前面 如果一個技術已經存在 2 年,比如現在很火的前端技術 react 和 vue 等,那麼我能預估這個技術大致還有 2 年的生命期,再久就不確定了;如果一個架構或設計原則已經存在 15 年,例如單一職責和依賴倒置原則,我可以預期它還有 15 年甚至更久的生命期。
  • 每日新書|麥肯錫叢書:47個小原則,揭秘職場晉升法則
    事實上,我有兩個筆記本:一個乾淨整齊,用於記錄探討與研究性的內容;另一個則比較潦草雜亂,用於記錄日常事項。總的來說,人們通過探討與研究來學習,接著把學習的知識付諸實踐並通過實踐收穫經驗,然後在經驗累積到一定程度後獲取能力。能力就是最終產物,在這一階段,一旦精通某事便不會輕易失去這種能力。2008年4月,我進入麥肯錫公司並擔任商業分析師。
  • 官方發布疫情緊急心理危機幹預指導原則 重點面向六類人群
    官方發布疫情緊急心理危機幹預指導原則 重點面向六類人群 2020-01-27 19:54:24作者:羅攀 責任編輯:羅攀   (抗擊新型肺炎)中國官方發布疫情緊急心理危機幹預指導原則
  • 姜松榮:設計的「倫理原則」
    下面我將從倫理的角度,以古今中外的設計活動及設計產品為審視對象,闡釋倫理在設計活動中的意義、地位與作用,倫理與實用、經濟、美觀之間的相互關係,倫理影響設計活動的機制、途徑與結果以及如何使倫理原則得到有效的貫徹與實施等諸多問題。眾所周知,在西方工業化革命以後,我國改革開放以來,科技的力量大大提高了人類徵服自然和改造自然的能力,獲取物質財富的方式與手段較以往任何時期都更加便捷和高效。
  • 面向對象編程的災難:是時候考慮更新換代了!
    對調試器的需求幾乎完全消失了——是的,不需要遍歷代碼並查看變量。我們所做的面對對象編程都錯了我對之前為這個主題創造了「對象」這個術語感到抱歉,因為它使許多人把注意力集中在較次要的概念上。事實上,最重要的是傳遞信息。
  • 設計的四項基本原則
    我先用「整體性、歸類、對比、邏輯」這個順序給大家解釋一下黑森林法則:在廣袤無垠的大草…宇宙中,所有的物質構成了宇宙的整體,宇宙的整體,整體物質總量是不變的、能夠被使用的能量也是不變的。地球上的所有人類歸類成人類的整體(小整體),三體星上三體人又歸類成一個整體(小整體)。兩個小整體之間科技、長相等等存在很多不同,形成了文明的鮮明對比。
  • 面向對象設計(OOD):迪米特法則(LoD)
    簡言之:talk only to your immediate friends(只跟你最親密的朋友交談),不跟陌生人說話。高內聚低耦合軟體設計有一個meta rule:高內聚,低耦合。內聚是從功能角度來度量模塊內的聯繫緊密度,一個好的內聚模塊應該恰好專注於完成一個事情,緊密相關的功能代碼才應該放置在一起。
  • 抖音官方推薦SPARK創作原則,文案得看
    抖音官方對於知識創作者,還推薦了一個 「SPARK創作原則」,並指出好的知識短視頻,需要去遵循。 所謂SPARK創作原則,也就是對應5個關鍵點: ● Person - 因人而異 ● Represent - 以身示範 啥叫 SPARK?
  • 索羅斯:人的不確定性原則
    經過一系列的冒險之後,我父親才終於回到了匈牙利。如果當時他留在集中營不逃走,可能早就回到家了。 父親回家後完全變了一個人,在俄國革命中的經歷深深地影響了他。他失去了雄心抱負,只希望享受人生別無他求。他傳給孩子們的價值觀非常不同於我們生活的那個年代。他沒有願望積累財富或在社會上成名。相反,他只工作到夠養家過日子即可。
  • 如果你想在人際交往中遊刃有餘,不妨看看這些一針見血的原則
    在職場中這些一針見血的原則,能讓你在人際交往這個遊戲領域裡成功「吃雞」。 遊戲的第一原則:提問原則 提問與回答是一門學問,能夠從中猜透很多人的心思。當你問:「最近手頭緊,可否借點錢給我?」
  • 《戰爭論》核心原則
    前三條原則闡述了廣義動量定理的過程四要素,表明如何增加勝利的可能性和成果;第四條原則與前三條原則共同組成系統思考的正反饋模型。《戰爭論》中寫道:「戰爭無非是政治通過另一種手段的繼續」,戰爭是完成政治目的的手段,政治的利益是戰爭所追求的目標,所以戰爭行為的決策標準是權衡利益。關於第一條(1)用最高的精力使用我們所可能動用的一切兵力。
  • 《麥肯錫晉升法則》:47條工作小原則,助力你快速實現升職加薪
    文 | 深夏晚晴天ZMH眾所周知,工作佔據了我們人生中的絕大部分時間。從二十歲出頭大學畢業,到60歲退休,每個人一生中需要工作的時間接近40年。對大部分人來說,工作是我們養家餬口的手段。職場晉升不僅能讓我們獲取更豐厚的報酬,也能提高我們的社會地位,實現自我的人生價值。
  • 電影製作的基本原則也許沒這麼強?
    相信有許多喜歡電影、甚至研究過編導的朋友們多少接觸過一些拍攝剪輯的「黃金法則」。就算作為一個觀影小白,數輿君也能隱約體會到,電影製作的過程中的鏡頭擺放,素材拼貼一定會有一些門道。什麼是180度原則?每一個電影場景(scene)都由幾個鏡頭(shot)組成,一個鏡頭指攝像機中獨立的,沒有被打斷的視頻片段。鏡頭之間的過度銜接被稱為「剪輯」(cut);而電影製作人的任務,就是將這些鏡頭按照特定的規則組合起來,使之變得有意義,並且觀眾可以輕鬆,愉悅地跟上視頻敘述的邏輯。
  • 論公平責任原則在我國侵權法歸責原則體系中的地位
    相對於過錯責任原則和危險責任原則(無過錯責任原則),①公平責任原則是否為一項獨立的歸責原則,理論界和司法實務界都存在較大爭議,筆者就此談談自己的看法,希望能起到拋磚引玉的作用。  一、侵權行為歸責原則概述  侵權行為的歸責原則,是指在損害事實已經發生的情況下,確定侵權行為人對自己的行為所造成的損害是否需要承擔侵權責任的依據和標準。
  • 如何給女朋友解釋什麼是面向對象編程?
    在面向過程的吃飯中,我們想要填飽肚子,需要自己親自下廚把這頓飯做出來,那麼,我們就需要先想好吃什麼、然後去買菜、洗菜、洗米、蒸飯、炒菜等等一系列的事情。對於程式設計師來說,就需要通讀代碼,找出可以復用的方法,然後重新調用,不能復用的就重新寫一個。時間久了,方法就會越來越多,系統維護越來越複雜。面向對象,其實就是我們通過點外賣的方式來「做飯」。我們知道我們需要一頓飯,我們只需要打開外賣軟體,在裡面選擇我們需要的菜品然後下單就可以了。我們不關心飯店做飯的過程。