Boolan 設計模式_1

主要內容:

本講主要講解面向對象設計的八大原則,和其中五個設計模式。

1. 綜述

目標:可復用(編譯單位級別的復用,不是源代碼的拷貝粘貼)
方法:面向對象
解決復雜問題方法:分解和抽象。
面向對象:適應變化、各負其責。

2. 面向對象設計八大原則

還是畫圖理解起來更容易些。。。


面向對象設計八大原則

【接口標準化】分析問題,有時候應該跳出軟件,結合人類發(fā)展歷史。。。秦始皇統(tǒng)一六國。
雕版印刷(緊耦合) --> 活字印刷(松耦合)

3. GOF-23模式

3.1 template method
  • 應用程序開發(fā)人員使用lib時,由于lib的開發(fā)人員已經(jīng)寫好程序的主流程和部分步驟的具體實現(xiàn)(這些是相對穩(wěn)定的), 應用開發(fā)人員只需對lib的類進行繼承,并重寫部分(override)它的成員函數(shù)(推薦為protdected類型,不被外界直接調用)即可。(晚綁定)。
  • 前提是有穩(wěn)定和不穩(wěn)定的成分,設計模式才有用武之地。如果全部都穩(wěn)定,或是全部都不穩(wěn)定,那么就不能使用設計模式。
  • 設計模式看類圖時,要找到其中穩(wěn)定和變化的部分。
  • library說:“你(應用程序)不要調用我(library),讓我調用你!”
  • 虛函數(shù)和函數(shù)指針都是晚綁定。
3.2 strategy
  • 【要動態(tài)的看問題,而不只是靜態(tài)的看待問題。加上時間軸,考慮到未來的變化】
  • 使用多態(tài)的變量(類內和類外),要用指針。
  • 為解決同一個問題的不同算法設計一個類,并實現(xiàn)各種的計算方法,當有新的算法時,則擴展算法(定義新的類來實現(xiàn))。不同算法之間可以相互替換(變化)。
  • 如果if...else if...是絕對穩(wěn)定的,那么大部分可以采用strategy method。
  • 優(yōu)點:當存在一些無用的算法時, 代碼具有良好的本地性,加載的代碼,就是調用相應的哪個實現(xiàn)方法,但利用if..else if...他們也會加載這些無用的算法到代碼段,影響性能。
3.3 observer/event觀察者模式
  • 編譯時依賴。違背依賴倒置原則。
  • c++支持多繼承,最好一個是主基類,其他的都是接口類。
  • 對象間一對多的依賴關系,一個對象的狀態(tài)變化時,所有依賴于它的對象得到通知,并各自自動更新。
  • 目標和觀察者獨立更改,松耦合。
  • 目標自動發(fā)送通知,無需指定觀察者。
  • 觀察者自己決定是否訂閱通知,不訂閱通知就不用將這個觀察者放入到目標雖維護的對象集合。目標無需知道觀察者是否訂閱了通知。
  • 單一職責原則表現(xiàn)突出的模式
3.4 decorator
  • 組合-->繼承;編譯時-->運行時的多態(tài);使用時,編譯時裝飾-->運行時裝飾。
  • CryptoStream繼承于Stream,并擁有一個Stream的指針(使用這種方法99%都是decorator模式)。繼承是為了繼承接口,完善接口規(guī)范,指針是為了實現(xiàn)運行時多態(tài),實現(xiàn)具體的類。
  • 當多個類繼承于同一個類時,多個類的相同的成員應該提到基類中,如果其中有些子類并不使用某些基類數(shù)據(jù)成員,這時就可以將這些數(shù)據(jù)成員放入一個中間類(DecoratorStream)中.
  • 主體操作和擴展操作應該分開繼承。



3.5 bridge
  • 類的數(shù)目1+n+n*m-->1+n+m
  • 當多個類繼承同一個類,基類中有一些不被子類重寫的成員函數(shù)時,可將基類拆分成兩個類。(Messager和MessageImp)
    抽象部分(平臺實現(xiàn))和實現(xiàn)部分(業(yè)務實現(xiàn)),多個變化維度分離,使他們可以獨立變化。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容