實例解析OOP程序設計七大設計原則(一)

開閉原則(Open-Closed Principle,OCP)

開閉原則是這七大設計原則中最常見、最基本的

開閉原則定義:軟件實體對擴展是開放的,但對修改是關閉的。意思就是說在不修改軟件實體的基礎上去擴展其他功能。

開閉原則實例:

比如實現一個繪製圖線的功能

設計方案如下圖所示


用戶類中直接調用畫直線類,但是如果有一個新需求,要求我們畫斜線或者曲線的話,這時就需要修改畫直線類中的代碼(使用switch,else if),這樣就違背了開閉原則,於是我需要在不修改實體的基礎上去擴展畫斜線和曲線功能

重構後的代碼設計方案如下圖所示


這樣我們在沒有改動代碼的情況下,而是添加代碼的情況下完成功能擴展


單一職責原則(Simple Responsibility Principle,SRP)

如果一個類具有多個職責,應該把這多個職責分離出去,再分別創建一些類去一一完成這些職責
換句話說就是一個類的職責要單一,不能將太多的職責放在一個類中
單一職責核心:高內聚、低耦合

如下圖是一個類畫線的實現:


但是功能太過集中,嚴重違背了單一職責原則,重構後如下圖所示



里氏替換原則(Liskov  Substitution Principle,LSP)


是繼承複用的基石,說白了就是繼承與派生的規則
里氏替換原則核心:在軟件系統中,一個可以接受父類對象的地方必然可以接受子類對象
里氏替換原則實例:某系統需要實現畫直線功能,現在有DrawLineA和DrawLineB兩種畫圖方式,在操作類中提供了這兩種畫圖方法選擇畫直線


現在我需要改變或添加一種畫直線方式來畫直線,比如原先使用DrawLineA方式進行畫直線現在更換爲DrawLineB方式來畫直線,如果直接修改操作類的代碼就違背了開閉原則。現在使用里氏替換原則重構代碼,既可以方便了系統擴展,又遵循了開閉原則
重構後的方案圖如下圖所示

所以說里氏替換原則是實現開閉原則的重要方法之一


依賴倒置原則(Dependence Inversion Principle,DIP)


依賴倒置也叫依賴注入、依賴倒轉
要針對抽象層編程,不要針對具體類編程
依賴倒置原則核心:要依賴於抽象,不要依賴於具體的實現。
分開來說:(注:抽象:接口或抽象類;細節:具體實現;如果把模塊層次關係比作基礎關係的話:高層模塊和底層模塊對應於父類和子類)
一、高層模塊不應該依賴底層模塊,這兩者應該依賴與其抽象 
二、抽想不應該依賴細節
三、細節應依賴抽象
依賴倒置實例:
比如某系統可以從本地獲取和服務器獲取數據,後將數據可以爲轉化配置成XML文件和XLS文件


假設我們增加了數據源或者有新的轉化格式,需要修改操作類裏面的源代碼,這樣就違背了開閉原則
現在使用依賴倒置原則對其進行重構
重構方案圖如下圖所示




歡迎轉載,轉載註明出處:blog.liujunliang.com.cn
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章