提供方可以修改,增加新的功能特性,但是使用方不需要被修改,即可享用新的功能特征 。
開閉原則廣泛的理解,可以指導類、模塊、系統(tǒng)的設計,滿足該原則的核心設計方法是:通過協(xié)議(接口)交互 。
4.3 里氏替換原則(LSP)
定義:所有引用父類的地方,必須能透明的使用它的子類對象,指導類繼承的設計 。
面向?qū)ο蟮睦^承特性,一方面,子類可以擁有父類的屬性和方法,提高了代碼的復用性;另一方面,繼承是有入侵性的,父類對子類有約束,子類必須擁有父類全部的屬性和方法,修改父類會影響子類,增加了耦合性 。
里氏替換原則是對繼承進行了約束,體現(xiàn)在以下方面:
- 子類可以實現(xiàn)父類的抽象方法,但不能重寫(覆蓋)父類的非抽象方法 。
- 子類可以增加父類所沒有的屬性和方法 。
- 子類重寫父類方法時,輸入?yún)?shù)類型要和父類的一致,或更寬松(參數(shù)類型的父類) 。
- 子類重寫父類方法時,返回值類型要和父類的一致,或更嚴謹(返回類型的子類) 。
定義:高層模塊不應該依賴低層模塊,兩者都應該依賴其抽象;抽象不應該依賴細節(jié),細節(jié)應該依賴抽象,目的是降低層與層之間的耦合 。
從倒置來看,該原則可以有更泛化的理解:
- 依賴實體的倒置:高層不依賴底層模塊,抽象不依賴細節(jié),例如模塊分層規(guī)范中的domain不依賴infrastructure的實現(xiàn) 。
- 依賴控制的倒置:依賴具體對象的創(chuàng)建控制,從程序內(nèi)部交給外部,例如Spring的Ioc容器 。

- 商業(yè)能力基座:主要包含購物車的業(yè)務流程實現(xiàn)、外域服務定義(非實現(xiàn))、商業(yè)定制能力(擴展點),打包后需滿足一套代碼多處部署的要求 。
- 域服務能力實例:針對不同運行環(huán)境,提供適配環(huán)境的域服務實現(xiàn),商業(yè)基座反向依賴域服務實例,使得基座與環(huán)境無關 。
定義:客戶端不應該被強迫去依賴它并不需要的接口 。
理解接口隔離原則,需要拿單一職責的原則做對比 。細品一下,如果一個接口滿足了單一職責,是否就也就滿足接口隔離原則?
- 單一職責原則,解決了接口內(nèi)聚的問題 。
- 接口隔離原則,認為某些場景下需要存在非內(nèi)聚接口(多職責),但是又不希望客戶端知道整個類,客戶端只要知道具有內(nèi)聚接口的抽象父類即可 。
五、編程范式
5.1 編程范式
編程范式,本質(zhì)是一種思維方式,而和具體語言沒關系 。
用C語言可以寫出面向?qū)ο蟮某绦?,用Java語言可以寫出面向過程的程序 。而不爭的現(xiàn)實是,我們大部分人是在用java寫面向過程的代碼 。
例如下面代碼,它是如何用面向過程語言實現(xiàn)封裝、繼承、多態(tài)的?

備注:以上代碼來自開源libevent庫
a. 結(jié)構(gòu)化(面向過程)編程
最早使用機器和匯編語言編程,是編排好一堆命令讓機器逐條執(zhí)行,為了控制一些跳躍的流程(如if/for/continue/break),就會用到類似goto的語句,讓程序直接跳轉(zhuǎn)到希望執(zhí)行的指令位置,這樣程序員就擁有了直接轉(zhuǎn)移程序控制權的能力 。goto的無條件轉(zhuǎn)移,使得程序的控制流難于追蹤,程序難以修改和維護 。
推薦閱讀
- 車輛識別代碼是什么意思
- 音序怎么寫在四線格里 音序怎么寫
- 2022年各高校專業(yè)代碼四位數(shù) 2022年各高校專業(yè)代碼
- 詩歌的特征包括 詩歌的特征包括哪四個
- 新課程教學反思中的問題有哪些
- 幼兒園教學經(jīng)驗總結(jié) 教師個人教學經(jīng)驗總結(jié)
- 羅牛山學校教學質(zhì)量怎么樣
- 月份天數(shù)口訣手指視頻 月份天數(shù)口訣歌
- python編程入門自學 游戲代碼大全可復制免費
- 教學過程的本質(zhì)表現(xiàn)在哪些方面 教學過程的本質(zhì)屬性是
