概念
設計模式描述了軟件設計過程中某一類常見問題的一般性的解決方案。
面向對象的設計模式描述了面向對象設計過程中,在特定場景下類與相互通訊的對象之間常見的組織關係。
設計模式與面向對象
面向對象設計模式解決的是“類與相互通信的對象之間的組織關係。包括他們的角色、職責、協作方式幾個方面。
面向對象設計模式是“好的面向對象設計”,所謂“好的面向對象設計”是那些可以滿足“因對變化,提高複用的設計”。
面向對象設計模式描述的是軟件設計,因此他是獨立於編程語言的,但是面向對象設計模式的最終實現仍然要使用面向對象編程語言來表達。
面向對象設計模式不像算法技巧,可以照搬照用,他是建立在對“面象對象”純熟、深入的理解的基礎上的經驗性認識。
從設計原則到設計模式
針對接口編程,而不是針對實現編程---客戶無需知道所有使用對象的特定類型,只需要知道對象擁有客戶所期望的接口。
優先使用對象組合,而不是類繼承---類繼承通常爲“白箱複用”,對象組合通常爲“黑箱複用”。繼承在某種程度上破壞了封裝性,子類父類耦合度高;而面向組合只要求組合的對象具有良好定義的接口,耦合度低。
封裝變化點---使用封裝來創建對象之間分界曾,讓設計者可以在分界曾的一側進行修改,而不會對另一側產生不良的影響,從而實現層次間的鬆耦合。
使用重構得到模式---設計模式的應用不宜先入爲主,一上來就是用設計模式是對設計模式的最大無用。沒有一步到位的設計模式。
幾個設計原則
在設計模式的使用中無時無刻都在貫穿着下面這幾個原則,所以說理解了這幾個設計原則對學習和理解設計模式有很大的幫助。
1 單一職責原(SRP):一個類應該僅有一個引起它變化的原因。
2 開放封閉原則(OCP):類模塊應該是可以擴展的,但是不可以修改(多擴展開放,對修改封閉)
3 Liskov替換原則(LSP):子類必須能夠替換他們的基類
4 依賴倒置原則(DIP):高層模塊不應該依賴於底層模塊,二者都應該依賴於抽象;抽象不應該依賴於實現細節,實現細節應該依賴於抽象。
5 接口隔離原則(ISP):不應該強迫客戶程序依賴於他們不用的方法。
上面只是簡單給出了定義,網上有很多關於這些原則的詳細介紹。
下面簡單談一下我自己對設計模式的認識,設計模式很早就接觸了,不過實際在項目中使用過的也只是很少的幾個,現在市面上有很多關於設計模式的書,其中不乏有些很生動的例子,非常容易理解,但設計模式並不是寫些簡單的Demo,個人感覺從很熟悉那些簡單的Demo到能夠靈活在項目中運用這中間有很長的路要走,需要我們多寫、多思考,多總結。之所以要使用設計模式,是因爲當變化來臨時我們能更方便快捷地解決問題,並且有利於以後的維護。如果沒有需求的變化,完全可以用自己認爲最簡單直接的方式去實現功能,不過需求往往是多變的。我們通常所講的設計模式指的是面向對象設計模式,所以學習好面向對象的知識是學習面向對象設計模式的前提。最近又將幾年前的關於設計模式的webcast講座翻出來聽了聽,感覺收穫頗多,也順便做了些筆記以備後用。
設計模式的分類
設計模式分類創建型、結構型、行爲型三類。