【设计模式】两大策略和六大原则
兩大設(shè)計策略
1. 從背景設(shè)計:
- 在設(shè)計各部分所呈現(xiàn)的細(xì)節(jié)之前先創(chuàng)建總體概念
- 共性和可變性分析
2. 類中封裝變化(適當(dāng)):
- 適應(yīng)未來的變化
- 只實現(xiàn)哪些需要的特性,避免“分析癱瘓”
六大設(shè)計原則
-
單一職責(zé)原則——SRP
-
開閉原則——OCP
-
里式替換原則——LSP
-
依賴倒置原則——DIP
-
接口隔離原則——ISP
-
迪米特原則——LOD
1. 單一職責(zé)原則(The Single Responsibility Principle? ? ? SPR)
一個類應(yīng)該應(yīng)該有專用的職責(zé),而不是“全家桶”,“萬金油”。
好處:降低復(fù)雜度,提高類的可讀性,和系統(tǒng)的維護(hù)性
2. 開閉原則(open-closed principle? ? OCP)
模塊,方法和類應(yīng)該對擴(kuò)展開放(OPEN),對修改封閉(CLOSE)。即:軟件設(shè)計不對其修改就能擴(kuò)展功能,用抽象去構(gòu)建框架,用實現(xiàn)擴(kuò)展細(xì)節(jié),這樣當(dāng)發(fā)生修改的時候,我們就直接用抽象了派生一個具體類去實現(xiàn)修改。
本質(zhì):將軟件設(shè)計成為新功能能夠作為單獨(dú)的模塊加入系統(tǒng),降低了集成成本。
3.里氏代換原則(The Liskov Substitution Principle? ? ?LSP)
子類型必須能夠替換掉它們的父類型,子類可以去擴(kuò)展父類的功能,但是不能改變父類原有的功能,建立抽象,通過抽象去建立規(guī)范,然后用實現(xiàn)去擴(kuò)展細(xì)節(jié)。 和COP是相互依存的。
-
子類可以實現(xiàn)父類的抽象方法,但是不能覆蓋父類的非抽象方法。
-
子類可以增加自己獨(dú)有的方法。
-
當(dāng)子類的方法重載父類的方法時候,方法的形參要比父類的方法的輸入?yún)?shù)更加寬松。
-
當(dāng)子類的方法實現(xiàn)父類的抽象方法時,方法的返回值要比父類更嚴(yán)格。
4. 依賴倒置原則(dependency inversion principle? ? DIP)
高層模塊不應(yīng)該依賴底層模塊,兩者都應(yīng)該依賴其抽象,抽象不應(yīng)該依賴細(xì)節(jié), 細(xì)節(jié)應(yīng)該依賴抽象。
模塊間的依賴是通過抽象來發(fā)生的,實現(xiàn)類之間不發(fā)生直接的依賴關(guān)系,其依賴關(guān)系是通過接口是來實現(xiàn)的。這就是俗稱的面向接口編程。
好處:具有很高的擴(kuò)展性,降低了代碼之間的耦合度,提高了系統(tǒng)的穩(wěn)定性。
5. 接口隔離原則(Interface Segregation Principle? ? ? ??ISP)
客戶端不應(yīng)該依賴他不需要的接口,建立單一接口,只建立需要的,剔除多余的,多余的成為另外單一新接口。
6. 迪米特法則(Law of Demeter? ? ?LOD):最少知識原則
一個對象應(yīng)該對其他對象保持最小的了解。不要直接關(guān)系的類不要出現(xiàn)在類的內(nèi)部。
好處:低耦合,高內(nèi)聚。
其他思考
- 小心過分依賴模式
- 模式都是發(fā)現(xiàn)而非發(fā)明
- 概念層次的模式和模型都是真理的抽象
- 適合某個問題的模式就在問題之中,而不是強(qiáng)加在問題之上。
- 模式實現(xiàn)的具體方式由問題本質(zhì),約束條件和需求決定。
- 使用模式警惕常見誤區(qū):浮于表面,偏見,錯選,誤判,削足適履。
?
總結(jié)
以上是生活随笔為你收集整理的【设计模式】两大策略和六大原则的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【面向对象】基本概念
- 下一篇: asp.net ajax控件工具集 Au