面向對象六大原則

原文地址:LoveDev

在學習設計模式之前,需要了解一下面向對象的六大原則乡小,設計模式大多都遵循這些原則阔加,寫代碼時心中時刻不要忘記六大原則,利用它們能寫出更整潔满钟、低耦合胜榔、高內聚的代碼,更加清晰的邏輯

該文章由網上以及書籍上的資料整理而來 :)

六大原則
六大原則

<h1 id="SRP"> 單一職責原則 </h1>
Single Responsibility Principle湃番,簡稱SRP夭织,對一個類而言,應該僅有一個引起它變化的原因吠撮,即一個類只負責一項職責

問題描述

當類 C 負責兩個不同的職責:職責 M1尊惰,職責 M2,職責 M1 需求發(fā)生改變需要改變類 C 的時候,很有可能影響到原先的職責 M2 的功能

解決方案

一個類只負責一個職責弄屡,當需求改變時题禀,不會影響到其他職責

<h1 id="LSP"> 里氏替換原則 </h1>
Liskov Substitution Principle,簡稱LSP膀捷,所有引用基類的地方必須能透明地使用其子類的對象

問題描述

有一個功能 M迈嘹,由類 C 完成,由于業(yè)務需要全庸,需要拓展 M 功能 M1秀仲,此時需要由類 C 的子類 C1 完成拓展功能,當 C1 完成 M1 功能的同時壶笼,有可能導致原來 M 功能不可用

解決方案

當使用繼承時神僵,遵循里氏替換原則。類 M1 繼承類 M 時覆劈,除添加新的方法完成 M1 的新增功能外保礼,盡量不要重寫父類 C 的方法,也盡量不要重載父類 C 的方法

繼承作為面向對象三大特性之一责语,在給程序設計帶來巨大便利的同時氓英,也帶來了弊端。比如使用繼承會給程序帶來侵入性鹦筹,程序的可移植性降低,增加了對象間的耦合性址貌,如果一個類被其他的類所繼承铐拐,則當這個類需要修改時,必須考慮到所有的子類练对,并且父類修改后遍蟋,所有涉及到子類的功能都有可能會產生故障

<h1 id="DIP"> 依賴倒置原則 </h1>
Dependence Inversion Principle,簡稱DIP

  • 高層模塊不應該依賴低層模塊螟凭,高層模塊是調用類虚青,低層模塊是實現(xiàn)類
  • 二者都應該依賴其抽象,抽象指接口或抽象類
  • 細節(jié)應該依賴抽象螺男,細節(jié)指實現(xiàn)類

問題描述

有 B 和 C 兩個實現(xiàn)類棒厘,類 A 直接依賴類 B,這種場景下下隧,類 A 一般為高層模塊奢人,負責復雜業(yè)務邏輯,類 B 和類 C 是低層模塊淆院,負責原子操作何乎,如果需要把類 A 改為依賴類 C,必須通過修改類 A 源代碼,可能會引入不必要的風險

Tip:

  • 原子操作:不可分割的支救,在執(zhí)行完畢之前不會被任何其它任務或事件中斷的操作

解決方案

將類 A 修改為依賴接口 I 抢野,類 B 和類 C 各自實現(xiàn)接口 I ,類 A 通過接口 I 間接與類 B 或者類 C 發(fā)生聯(lián)系各墨,則會大大降低修改類A的幾率

示例代碼:

    interface Animal{
        public String getFood();
    }

    class Cat implements Animal {
        
        @Override
        public String getFood() {
            return "魚";
        }
    }

    class Dog implements Animal{
       
        @Override
        public String getFood() {
            return "骨頭";
        }
    }

    class Master {
        // 依賴Animal接口
        public void feed(Animal animal) {
            String food = animal.getFood();
        }
    }

<h1 id="ISP"> 接口隔離原則 </h1>
Interface Segregation Principle指孤,簡稱ISP,一個類對另一個類的依賴應該建立在最小的接口上

問題描述

類 A 通過接口 I 依賴類 B欲主,類 C 通過接口 I 依賴類 D邓厕,如果接口 I 對于類 A 和類 B 來說不是最小接口,則類 B 和類 D 必須去實現(xiàn)他們不需要的方法

解決方案

將臃腫的接口I拆分為獨立的幾個接口扁瓢,類A和類C分別與他們需要的接口建立依賴關系详恼。也就是采用接口隔離原則

<h1 id="LoD"> 迪米特法則 </h1>
Law of Demeter,簡稱LoD引几,也稱為最少知識原則(Principle of Least Knowledge)或得墨忒耳定律昧互,一個對象應該對其他對象保持最少的了解

問題描述

類與類之間的關系越密切诅愚,耦合度越大拢蛋,當一個類發(fā)生改變時助析,對另一個類的影響也越大

解決方案

盡量降低類與類之間的耦合

<h1 id="OCP"> 開閉原則 </h1>
Open Close Principle倘待,簡稱OCP飒货,對象應該對擴展開放批狐,對修改關閉瓮下,開閉原則是面向對象設計中最基礎的設計原則

問題描述

在軟件的開發(fā)工程中记劈,因為需求變化盖腕,升級赫冬,重構和維護等原因,需要修改源代碼溃列,這樣很有可能引入錯誤

解決方案

當軟件有變化時劲厌,盡量通過擴展的行為實現(xiàn)變化,而不是通過修改已有的代碼實現(xiàn)變化

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末听隐,一起剝皮案震驚了整個濱河市补鼻,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌雅任,老刑警劉巖风范,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異沪么,居然都是意外死亡乌企,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進店門成玫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來加酵,“玉大人拳喻,你說我怎么就攤上這事≈硗螅” “怎么了冗澈?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長陋葡。 經常有香客問我亚亲,道長,這世上最難降的妖魔是什么腐缤? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任捌归,我火速辦了婚禮,結果婚禮上岭粤,老公的妹妹穿的比我還像新娘惜索。我一直安慰自己,他們只是感情好剃浇,可當我...
    茶點故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布巾兆。 她就那樣靜靜地躺著,像睡著了一般虎囚。 火紅的嫁衣襯著肌膚如雪角塑。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天淘讥,我揣著相機與錄音圃伶,去河邊找鬼。 笑死蒲列,一個胖子當著我的面吹牛留攒,可吹牛的內容都是我干的。 我是一名探鬼主播嫉嘀,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼魄揉!你這毒婦竟也來了剪侮?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤洛退,失蹤者是張志新(化名)和其女友劉穎瓣俯,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體兵怯,經...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡彩匕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了媒区。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片驼仪。...
    茶點故事閱讀 39,731評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡掸犬,死狀恐怖,靈堂內的尸體忽然破棺而出绪爸,到底是詐尸還是另有隱情湾碎,我是刑警寧澤,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布奠货,位于F島的核電站介褥,受9級特大地震影響,放射性物質發(fā)生泄漏递惋。R本人自食惡果不足惜柔滔,卻給世界環(huán)境...
    茶點故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望萍虽。 院中可真熱鬧睛廊,春花似錦、人聲如沸贩挣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽王财。三九已至卵迂,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間绒净,已是汗流浹背见咒。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留挂疆,地道東北人改览。 一個月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像缤言,于是被迫代替她去往敵國和親宝当。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,629評論 2 354

推薦閱讀更多精彩內容

  • 1.單一職責原則 一個類只做一件事胆萧,需要根據自己的經驗判斷到底哪些內容算是當前一個類的職責庆揩。 定義:不要存在多于一...
    月剪西風閱讀 280評論 0 0
  • 記在前面:這個《設計模式》系列的文章,想了很久才決定寫的跌穗,一是還是本人的原則订晌,只有通過自己表達出來的東西,才是真正...
    l_sivan閱讀 639評論 6 17
  • 本文出自《Android源碼設計模式解析與實戰(zhàn)》中的第一章蚌吸。 1锈拨、優(yōu)化代碼的第一步——單一職責原則 單一職責原則的...
    MrSimp1e0閱讀 1,766評論 1 13
  • 本文原創(chuàng),轉載請注明出處羹唠。歡迎關注我的 簡書 奕枢,關注我的專題 Android Class 我會長期堅持為大家收錄簡...
    MeloDev閱讀 1,232評論 8 33
  • 設計模式 面向對象的六大原則 單一職責原則 單一職責原則 (SRP) 是指就一個類而言娄昆,應該僅有一個引起它變化的原...
    知北遊閱讀 596評論 0 2