最近在學習李建忠老師一系列的關於物件導向設計模式的課程,就想著把總結下來,以便自己以後的學習,設計模式是乙個比較空洞的話題,隨著我們的程式設計經驗的積累,我們能增加對它的理解,這是乙個日積月累的過程,但是我們應該在平時的程式設計過程中學會思考和分析,想一想在某種特定的場景下使用什麼樣的設計模式,怎樣才能做到**的易擴充套件和維護,這都是我們要思考的問題,所以掌握好設計模式能對我們的程式設計起到很大的作用,能讓我們寫出來的**很美。
設計模式描述了軟體設計過程中某一類常見問題的一般性的解決方案,物件導向的設計模式描述了物件導向設計過程中,特定場景下,類與相互通訊的物件之間常見的組織關係。
1.物件導向設計模式解決的是「類與相互通訊的物件之間的組織關係」,包括他們的角色、職責、協作方式幾個方面
2.物件導向的設計模式是「好的物件導向設計」,所謂「好的物件導向設計」是那些可以滿足」應對變化,提高復用「的設計。
3.物件導向設計模式描述的是軟體設計,因此它是獨立於程式語言的,但是物件導向設計模式的最終實現仍然需要使用物件導向程式設計語言來表達。
4.物件導向設計模式不像演算法技巧,可以照常搬用,它是建立在對」物件導向「純熟、深入的理解的接觸上的經驗性認識。掌握物件導向設計模式的前提是首先掌握」物件導向「!
1.各種物件導向程式設計語言相互有別,但都能看到他們物件導向三大機制的支援,即:」封裝,繼承,多型「。封裝:隱藏內部的實現;繼承:**的復用;多型:改寫物件的行為
2.使用物件導向程式設計語言(如c#),可以推動程式設計師以物件導向的思維來思考軟體設計結構,從而強化物件導向的程式設計正規化。
3.c#是一門支援物件導向程式設計的優秀語言,包括:各種級別的封裝支援;單實現繼承+多實現介面;抽象方法與虛方法重寫
但是通過物件導向程式設計語言(oopl)認識到的物件導向,並不是物件導向的全部,甚至只是擱淺的物件導向。oopl的三大機制」封裝,繼承,多型「可以表達物件導向的所有概念,但這三大機制本身並沒有刻畫出物件導向的核心精神。換言之,不是使用了物件導向的語言就實現了物件導向的設計與開發!因此我們不能依賴程式語言的物件導向機制,來掌握物件導向。oopl沒有回答物件導向的根本性問題——我們為什麼要使用物件導向?我們應該怎樣使用三大機制來實現」好的物件導向「?我們應該遵循什麼樣的物件導向原則?
1.針對介面程式設計,而不是針對實現程式設計
客戶程式無需知道所使用物件的特定型別,只需要知道物件擁有客戶所期望的介面
2.優先使用物件組合而不是類繼承
類繼承通常是」白箱復用「,物件組合通常為」黑箱復用「。繼承在某種程度上破壞了封裝性,子類父類耦合度高;而物件組合只要求被組合的物件具有良好定義的介面,耦合度低。
3.封裝變化點
使用封裝來建立物件之間的分界層,讓設計者可以在分界層的一側進行修改,而不會對另一側產生不良的影響,從而實現層次間的低耦合。
4.使用重構得到模式
設計模式的應用不易先入為主,一上來就使用設計模式是對設計模式的一大誤用。沒有一步到位的設計模式。敏捷軟體開發實踐提倡的」refactoring to patterns(重構到模式)「是目前普遍認為最好的使用設計模式的方法。
單一職責原則(srp)
乙個類應該僅有乙個引起它變化的原因
開放封閉原則(ocp)
類模組應該是可擴充套件的,但是不可修改(對擴充套件開放,對更改封閉)
liskov替換原則(lsp)
子類必須能夠替換他們的基類
依賴倒置原則(dip)
高層模組不應該依賴於底層模組,二者應該依賴於抽象
抽象不應該依賴於實現細節,實現細節應該依賴於抽象
介面隔離原則(isp)
不應該強迫客戶程式依賴於他們不用的方法
物件導向設計模式原則
一 單一職責原則srp single responsibility principle 單一職責原則,指的是乙個類應該僅有乙個引起它變化的原因。變化的原因,即所謂的 職責 如果乙個類有多個引起變化的原因,就意味著這個類有多個職責,也就是說多個職責耦合在了一起。這會造成相互影響,可能乙個職責變化影響到...
物件導向設計模式原則
物件導向設計模式原則 網路 1.單一職責原則 srp 單一職責原則 srp 就乙個類而言,應該僅有乙個引起它變化的原因。也就是說,不要把變化原因各不相同的職責放在一起,因為不同的變化會影響到不相干的職責。再通俗一點地說就是,不該你管的事情你不要管,管好自己的事情就可以了,多管閒事害了自己也害了別人。...
物件導向設計模式原則
本文為 設計模式之禪 第二章的讀書筆記 定義 應該有且僅有乙個原因引起類的變化 難點 如何劃分職責 實踐 一般專案類很多時候沒法滿足 單一職責原則,但是介面一定要滿足單一職責原則 定義 凡是父類能出現的地方,子類都能夠出現 具體分為三個層面 注 此時是通過過載而不是重寫父類的方法,實現子類的功能 定...