發(fā)文章
發(fā)文工具
撰寫
網(wǎng)文摘手
文檔
視頻
思維導(dǎo)圖
隨筆
相冊(cè)
原創(chuàng)同步助手
其他工具
圖片轉(zhuǎn)文字
文件清理
AI助手
留言交流
對(duì)于開放封閉原則,它是面向?qū)ο笏性瓌t的核心,軟件設(shè)計(jì)說到底追求的目標(biāo)就是封裝變化、降低耦合,而開放封閉原則就是這一目標(biāo)的最直接體現(xiàn)。開放封閉原則,其核心思想是:軟件實(shí)體應(yīng)該是可擴(kuò)展的,而不可修改的。也就是,對(duì)擴(kuò)展開放,對(duì)修改封閉的。 因此,開放封閉原則主要體現(xiàn)在兩個(gè)方面:1、對(duì)擴(kuò)展開放,意味著有新的需求或變化時(shí),可以對(duì)現(xiàn)有代碼進(jìn)行擴(kuò)展,以適應(yīng)新的情況。2、對(duì)修改封閉,意味著類一旦設(shè)計(jì)完成,就可以獨(dú)立完成其工作,而不要對(duì)其進(jìn)行任何嘗試的修改。 實(shí)現(xiàn)開開放封閉原則的核心思想就是對(duì)抽象編程,而不對(duì)具體編程,因?yàn)槌橄笙鄬?duì)穩(wěn)定。讓類依賴于固定的抽象,所以修改就是封閉的;而通過面向?qū)ο蟮睦^承和多態(tài)機(jī)制,又可以實(shí)現(xiàn)對(duì)抽象類的繼承,通過覆寫其方法來改變固有行為,實(shí)現(xiàn)新的拓展方法,所以就是開放的。 “需求總是變化”沒有不變的軟件,所以就需要用封閉開放原則來封閉變化滿足需求,同時(shí)還能保持軟件內(nèi)部的封裝體系穩(wěn)定,不被需求的變化影響。 依賴倒置原則
對(duì)于依賴倒置原則,其核心思想是:依賴于抽象。具體而言就是高層模塊不依賴于底層模塊,二者都同依賴于抽象;抽象不依賴于具體,具體依賴于抽象。 我們知道,依賴一定會(huì)存在于類與類、模塊與模塊之間。當(dāng)兩個(gè)模塊之間存在緊密的耦合關(guān)系時(shí),最好的方法就是分離接口和實(shí)現(xiàn):在依賴之間定義一個(gè)抽象的接口使得高層模塊調(diào)用接口,而底層模塊實(shí)現(xiàn)接口的定義,以此來有效控制耦合關(guān)系,達(dá)到依賴于抽象的設(shè)計(jì)目標(biāo)。 抽象的穩(wěn)定性決定了系統(tǒng)的穩(wěn)定性,因?yàn)槌橄笫遣蛔兊?,依賴于抽象是面向?qū)ο笤O(shè)計(jì)的精髓,也是依賴倒置原則的核心。 依賴于抽象是一個(gè)通用的原則,而某些時(shí)候依賴于細(xì)節(jié)則是在所難免的,必須權(quán)衡在抽象和具體之間的取舍,方法不是一層不變的。依賴于抽象,就是對(duì)接口編程,不要對(duì)實(shí)現(xiàn)編程。 接口隔離原則 對(duì)于接口隔離原則,其核心思想是:使用多個(gè)小的專門的接口,而不要使用一個(gè)大的總接口。 具體而言,接口隔離原則體現(xiàn)在:接口應(yīng)該是內(nèi)聚的,應(yīng)該避免“胖”接口。一個(gè)類對(duì)另外一個(gè)類的依賴應(yīng)該建立在最小的接口上,不要強(qiáng)迫依賴不用的方法,這是一種接口污染。 接口有效地將細(xì)節(jié)和抽象隔離,體現(xiàn)了對(duì)抽象編程的一切好處,接口隔離強(qiáng)調(diào)接口的單一性。而胖接口存在明顯的弊端,會(huì)導(dǎo)致實(shí)現(xiàn)的類型必須完全實(shí)現(xiàn)接口的所有方法、屬性等;而某些時(shí)候,實(shí)現(xiàn)類型并非需要所有的接口定義,在設(shè)計(jì)上這是“浪費(fèi)”,而且在實(shí)施上這會(huì)帶來潛在的問題,對(duì)胖接口的修改將導(dǎo)致一連串的客戶端程序需要修改,有時(shí)候這是一種災(zāi)難。在這種情況下,將胖接口分解為多個(gè)特點(diǎn)的定制化方法,使得客戶端僅僅依賴于它們的實(shí)際調(diào)用的方法,從而解除了客戶端不會(huì)依賴于它們不用的方法。 分離的手段主要有以下兩種:1、委托分離,通過增加一個(gè)新的類型來委托客戶的請(qǐng)求,隔離客戶和接口的直接依賴,但是會(huì)增加系統(tǒng)的開銷。2、多重繼承分離,通過接口多繼承來實(shí)現(xiàn)客戶的需求,這種方式是較好的。 Liskov替換原則
對(duì)于Liskov替換原則,其核心思想是:子類必須能夠替換其基類。這一思想體現(xiàn)為對(duì)繼承機(jī)制的約束規(guī)范,只有子類能夠替換基類時(shí),才能保證系統(tǒng)在運(yùn)行期內(nèi)識(shí)別子類,這是保證繼承復(fù)用的基礎(chǔ)。在父類和子類的具體行為中,必須嚴(yán)格把握繼承層次中的關(guān)系和特征,將基類替換為子類,程序的行為不會(huì)發(fā)生任何變化。同時(shí),這一約束反過來則是不成立的,子類可以替換基類,但是基類不一定能替換子類。 Liskov替換原則,主要著眼于對(duì)抽象和多態(tài)建立在繼承的基礎(chǔ)上,因此只有遵循了Liskov替換原則,才能保證繼承復(fù)用是可靠地。實(shí)現(xiàn)的方法是面向接口編程:將公共部分抽象為基類接口或抽象類,通過Extract Abstract Class,在子類中通過覆寫父類的方法實(shí)現(xiàn)新的方式支持同樣的職責(zé)。 Liskov替換原則是關(guān)于繼承機(jī)制的設(shè)計(jì)原則,違反了Liskov替換原則就必然導(dǎo)致違反開放封閉原則。 Liskov替換原則能夠保證系統(tǒng)具有良好的拓展性,同時(shí)實(shí)現(xiàn)基于多態(tài)的抽象機(jī)制,能夠減少代碼冗余,避免運(yùn)行期的類型判別。
以上就是5個(gè)基本的設(shè)計(jì)原則,它們就像面向?qū)ο蟪绦蛟O(shè)計(jì)中的金科玉律,遵守它們可以使我們的代碼更加鮮活,易于復(fù)用,易于拓展,靈活優(yōu)雅。不同的設(shè)計(jì)模式對(duì)應(yīng)不同的需求,而設(shè)計(jì)原則則代表永恒的靈魂,需要在實(shí)踐中時(shí)時(shí)刻刻地遵守。就如ARTHUR J.RIEL在那邊《OOD啟示錄》中所說的:“你并不必嚴(yán)格遵守這些原則,違背它們也不會(huì)被處以宗教刑罰。但你應(yīng)當(dāng)把這些原則看做警鈴,若違背了其中的一條,那么警鈴就會(huì)響起?!?br> 請(qǐng)記住這些技術(shù)大師的名字和作品,并深入研習(xí)其中的招式和經(jīng)驗(yàn),正是他們讓面向?qū)ο蟪绦蛟O(shè)計(jì)變得如此光彩奪目,沿著這些智慧的道路一直走下去,我覺得,我們會(huì)不僅僅提高了技術(shù),還會(huì)發(fā)現(xiàn)設(shè)計(jì)以外的東西,因?yàn)镺OP還蘊(yùn)含著人生的很多智慧。
來自: 昵稱10504424 > 《C#》
0條評(píng)論
發(fā)表
請(qǐng)遵守用戶 評(píng)論公約
面向?qū)ο蟮幕驹瓌t
面向?qū)ο蟮幕驹瓌t單一職責(zé)原則(Single-Resposibility Principle)。"對(duì)一個(gè)類而言,應(yīng)該僅有一個(gè)引起它變化的原因。"本原則是我們非常熟悉地"高內(nèi)聚性原則"的引申,但是通過將&qu...
[原創(chuàng)]敏捷設(shè)計(jì)之面向?qū)ο笤O(shè)計(jì)原則 (入選推薦日志,加20幣) - 航行日志——理論與實(shí)踐...
敏捷設(shè)計(jì)之面向?qū)ο笤O(shè)計(jì)原則。單一職責(zé)原則(The Single Responsibility Principle,簡稱SRP)開放-封閉原則(The Open-Close Principle,簡稱OCP)Liskov替換原則(The Liskov Substitution Pri...
GitHub最熱!碼代碼不得不知的所有定律法則
碼代碼不得不知的所有定律法則。阿姆達(dá)爾定律布魯克斯法則康威定律侯世達(dá)定律炒作周期 &阿瑪拉定律海勒姆法則摩爾定律帕金森定律Put...
從架構(gòu)到設(shè)計(jì)
所以,依賴和耦合在我看來是對(duì)一個(gè)問題的兩種表達(dá),依賴闡釋了耦合本質(zhì),而耦合量化了依賴程度。零耦合,表示兩個(gè)類沒有依賴。具體耦合...
設(shè)計(jì)模式隨筆系列:開篇
另外最近在學(xué)習(xí)李建忠老師的“C#面向?qū)ο笤O(shè)計(jì)模式縱橫談系列課程”時(shí)候,李老師提出了一個(gè)“重構(gòu)到模式”的理論,感覺十分有道理,模式...
做一個(gè)專業(yè)軟件開發(fā)必須精通的事項(xiàng),你還差多少
LSP The Liskov Substitution Principle里氏替換原則:所有的子類都可以替換其基類,這個(gè)原則其實(shí)是對(duì)編程語言的要求,只有實(shí)現(xiàn)這個(gè)原則...
設(shè)計(jì)模式-概述
設(shè)計(jì)模式-概述面向?qū)ο?。設(shè)計(jì)模式:中層,語言無關(guān),如工廠模式,策略模式等。結(jié)構(gòu)型結(jié)構(gòu)型模式主要用于處理類或?qū)ο蟮慕M合,主要有適配...
重溫設(shè)計(jì)模式系列(三)面向?qū)ο笤O(shè)計(jì)原則
重溫設(shè)計(jì)模式系列(三)面向?qū)ο笤O(shè)計(jì)原則。用于隔離或組合兩個(gè)類之間的交互,避免兩個(gè)或多個(gè)事物之間直接耦合,比如用戶類和商品類,兩...
面向?qū)ο笤O(shè)計(jì)模式5大基本原則
面向?qū)ο笤O(shè)計(jì)模式有5大基本原則:單一職責(zé)原則、開發(fā)封閉原則、依賴倒置原則、接口隔離原則、Liskov替換原則。4、接口隔離原則:現(xiàn)在這...
微信掃碼,在手機(jī)上查看選中內(nèi)容