设计模式 学习笔记(2)单一职责原则、开放封闭原则、依赖倒转原则
(3)單一職責原則
單一職責原則(SRP),就一個類而言,應該僅有一個引起它變化的原因。例如,我們在寫一個窗體應用程序,一般都會生成一個Form這樣的類,于是我們就把各種各樣的代碼,像算法、數據庫訪問SQL都寫到這樣的類中,這就意味著,無論何種需求要來,你都需要更改這個窗體類,維護麻煩,不能復用,缺乏靈活性。
如果一個類承擔的職責過多,就等于把這些職責耦合在一起,一個職責的變化可能會削弱或者抑制這個類完成其它職責的能力。這種耦合會導致脆弱的設計,當變化發(fā)生時,設計會遭受到意想不到的破壞。
軟件設計真正要做的內容就是發(fā)現職責并把那些職責相互分離。其實要去判斷是否應該分離出類來,也不難,就是如果你能夠想到一個的動機去改變一個類,那么這個類具有多于一個的職責,就應該考慮將類的職責分離。
(4)開放封閉原則
開放-封閉原則,是說軟件實體(類、模塊、函數等等)應該可以擴展,但是不可修改。這個原則具有兩個特征:①是對于擴展是開發(fā)的(Open for extension),②對于修改是封閉的(Closed for modification)[ASD]。
需求的變化,軟件可以相對容易修改來適應需求的變化。
開放-封閉原則的意思是你設計的時候要盡量讓這個類是足夠好,寫好了就不要去修改了;如果新需求來,我們增加一些類就完事了,原來的代碼能不動則不動。
但絕對的對修改封閉是不可能的。無論模塊是多么“封閉”,都會存在一些無法對之封閉的變化。既然不可能完全封閉,設計人員必須對于他設計的模塊 對哪種變化封閉做出選擇。他必須先猜測出最有可能發(fā)生的變化的種類,然后構造抽象來隔離那些變化[ASD]。等到變化發(fā)生時立即采取行動[ASD],即在 發(fā)生變化時,就及早去想辦法應對更大變化的可能。
(5)依賴倒轉原則(依賴倒置原則)
解釋為:抽象不應該依賴細節(jié),細節(jié)應該依賴于抽象。說白了,就是針對接口編程。不要對實現編程。具體一點就是接口或抽象類,只要接口是穩(wěn)定點,那么任何一個更改都不用擔心其它部分受影響,這就使得無論高層模塊還是底層模塊都可以很容易地被復用。
?里氏代換原則
通俗解釋:一個軟件實體如果使用的是一個父類的話,那么一定適用于其子類,而且它察覺不出父類對象和子類對象的區(qū)別。也就是說,父類都被替換為它的子類程序的行為不會發(fā)生變化。
也正因為有了這個原則,使得繼承復用成為了可能,只有當子類可以替換掉父類,軟件單位的功能不會受到影響時,父類才能真正被復用,而子類能夠在父類的基礎上增加新的行為。由于子類的可替換性,父類才使得父類類型的模塊在無需修改的情況下就可以擴展。里氏代換原則使開發(fā)封閉成為可能。
依賴倒轉其實就是誰也不要依靠誰,除了約定的接口,大家都可以靈活自如。依賴倒轉其實可以說是面向對象設計的標志,用哪種語言編寫程序不重要, 如果編寫時考慮的都是如何針對抽象編程而不是針對細節(jié)編程,即程序中所有依賴關系都是終止于抽象類或者接口,那就是面向對象的設計,反之那就是過程化的設計。遵循依賴倒轉就是讓程序都依賴抽象,而不是相互依賴。
轉載于:https://www.cnblogs.com/xiaobang/archive/2013/05/29/3105638.html
總結
以上是生活随笔為你收集整理的设计模式 学习笔记(2)单一职责原则、开放封闭原则、依赖倒转原则的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: MySQL 调用存储过程
- 下一篇: 从全然不知到融会贯通 ——对小猿搜题手机
