c++ 設計模式 - 1

1.什么是好的軟件設計虑鼎?軟件設計的金科玉律:復用

2.設計模式八大原則

  • 依賴倒置原則(DIP)
    1. 高層模塊(穩(wěn)定)不應該依賴于低層模塊(變化),二者都應該依賴于抽象(穩(wěn)定)杠娱。
2.   抽象(穩(wěn)定)不應該依賴于實現(xiàn)細節(jié)(變化)廷区,實現(xiàn)細節(jié)能改依賴于抽象(抽象)嬉挡。
  • 開放封閉原則(OCP)
1. 對擴展開放胚迫,對更改封閉
2. 類模塊應該是可擴展的喷户,但是不可修改。
  • 單一職責原則(SRP)
  1. 一個類應該僅有一個引起它變化的原因访锻。
  2. 變化的方向隱含著類的責任褪尝。
  • Liskov替換原則(LSP)
  1. 子類必須能夠替換他們的基類(IS-A)闹获。
  2. 繼承表達類型抽象。
  • 接口隔離原則(ISP)
  1. 不應該強迫客戶程序依賴他們不用的方法河哑。
  2. 接口應該小而完備避诽。
  • 優(yōu)先使用對象組合,而不是類繼承
1. 類繼承通常為“白箱復用”璃谨,對象組合通常為“黑箱復用”沙庐。
2. 繼承在某種程度上破壞了封裝性,子類父類耦合度高睬罗。
  1. 對象組合則只要求被組合的對象具有良好定義的接口轨功,耦合度底旭斥。
  • 封裝變化點
  1. 使用封裝創(chuàng)建對象之間的分界層容达,讓設計者可以在分界層的一側(cè)進行修改,而不會對另一側(cè)產(chǎn)生不良的影響垂券,從而實現(xiàn)層次間的松耦合花盐。
  • 針對接口編程,而不是針對實現(xiàn)編程
  1. 不將變量類型聲明為某個特定的具體類菇爪,而是聲明為某個接口算芯。
  2. 客戶程序無需獲知對象的具體類型,只需要知道對象所具有的接口凳宙。
  3. 減少系統(tǒng)中各部分的依賴關系熙揍,從而實現(xiàn)“高內(nèi)聚,松耦合”的類型設計方案氏涩。

3.設計模式

  1. Template Method

  2. 在軟件構建過程中届囚,我們需要為某些對象建立一種“通知依賴關系”——一個對象(目標對象)的狀態(tài)發(fā)生改變,所有的依賴對象(觀察者對象)都將得到通知是尖。

  3. 定義對象間的一種一對多(變化)的依賴關系意系,以便當一個對象(Subject)的狀態(tài)發(fā)生改變時,所有依賴于它的對象都得到通知并自動更新饺汹。

  4. Strategy

  5. 在軟件構件過程中蛔添,某些對象使用的算法可能多種多樣,經(jīng)常改變兜辞,如果將這些算法都編碼到對象中迎瞧,將會使對象變得異常負責,而且有時候支持不適用的算法也是一個性能負擔逸吵。

  6. 定義一系列算法夹攒,把他們一個個封裝起來,并且使他們可以相互替換(變化)胁塞,該模式使得算法可獨立于使用它的客戶程序(穩(wěn)定)而變化(擴展咏尝,子類化)压语。

  7. Observer/Event

  8. 在軟件構建過程中,我們需要為某些對象建立一種“通知依賴關系”——一個對象(目標對象)的狀態(tài)發(fā)生改變编检,所有的依賴對象(觀察者對象)都將得到通知胎食。

  9. 定義對象間的一種一對多(變化)的依賴關系,以便當一個對象(Subject)的狀態(tài)發(fā)生改變時允懂,所有依賴于它的對象都得到通知并自動更新厕怜。

  10. Decorator

  11. 在某些情況下,我們可能會“過度的使用繼承來擴展對象的功能”蕾总,由于繼承為類型引入的靜態(tài)特性粥航,使得這種擴展方式缺少靈活性,并且隨著子類的增多生百,各種子類的組合會導致更多子類的膨脹递雀。

  12. 動態(tài)(組合)的給一個對象增加一些額外的職責,就增加功能而言蚀浆,Decorator模式比生成子類(繼承)更為靈活(消除重復代碼&減少子類個數(shù))缀程。

  13. Bridge

  14. 由于某些類型的固有的實現(xiàn)邏輯,使得它們具有連個變化的維度市俊,乃至多個維度的變化杨凑。

  15. 將抽象部分(業(yè)務功能)與實現(xiàn)部分(平臺實現(xiàn))分離,使它們可以獨立變化摆昧。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末撩满,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子绅你,更是在濱河造成了極大的恐慌伺帘,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件勇吊,死亡現(xiàn)場離奇詭異曼追,居然都是意外死亡,警方通過查閱死者的電腦和手機汉规,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進店門礼殊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人针史,你說我怎么就攤上這事晶伦。” “怎么了啄枕?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵婚陪,是天一觀的道長。 經(jīng)常有香客問我频祝,道長泌参,這世上最難降的妖魔是什么脆淹? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮沽一,結果婚禮上盖溺,老公的妹妹穿的比我還像新娘。我一直安慰自己铣缠,他們只是感情好烘嘱,可當我...
    茶點故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蝗蛙,像睡著了一般蝇庭。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上捡硅,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天哮内,我揣著相機與錄音,去河邊找鬼病曾。 笑死牍蜂,一個胖子當著我的面吹牛漾根,可吹牛的內(nèi)容都是我干的泰涂。 我是一名探鬼主播,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼辐怕,長吁一口氣:“原來是場噩夢啊……” “哼逼蒙!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起寄疏,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤是牢,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后陕截,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體驳棱,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年农曲,在試婚紗的時候發(fā)現(xiàn)自己被綠了社搅。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡乳规,死狀恐怖形葬,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情暮的,我是刑警寧澤笙以,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布,位于F島的核電站冻辩,受9級特大地震影響猖腕,放射性物質(zhì)發(fā)生泄漏拆祈。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一倘感、第九天 我趴在偏房一處隱蔽的房頂上張望缘屹。 院中可真熱鬧,春花似錦侠仇、人聲如沸轻姿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽互亮。三九已至,卻和暖如春余素,著一層夾襖步出監(jiān)牢的瞬間豹休,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工桨吊, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留威根,地道東北人。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓视乐,卻偏偏與公主長得像洛搀,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子佑淀,可洞房花燭夜當晚...
    茶點故事閱讀 43,728評論 2 351

推薦閱讀更多精彩內(nèi)容

  • 面向?qū)ο笤O計原則 單一職責原則(SRP) 一個類應該只負責一項職責留美,即只承擔某一項功能。一個類應該僅有一個引起它變...
    lamont閱讀 271評論 0 0
  • 設計模式基本原則 開放-封閉原則(OCP)伸刃,是說軟件實體(類谎砾、模塊、函數(shù)等等)應該可以拓展捧颅,但是不可修改景图。開-閉原...
    西山薄涼閱讀 3,777評論 3 14
  • 設計模式匯總 一、基礎知識 1. 設計模式概述 定義:設計模式(Design Pattern)是一套被反復使用碉哑、多...
    MinoyJet閱讀 3,922評論 1 15
  • 本文預覽: 設計模式簡介軟件設計固有的復雜性如何解決復雜性軟件設計的目標 設計模式六大原則 組件協(xié)作模式模板方法策...
    alex_zhou閱讀 1,158評論 0 0
  • 具體詳見我的博客:(作業(yè)的碼在博客最后)design patterns責任是思考面向?qū)ο笤O計的一個觀點從概念層面挚币,...
    TACITURNLY閱讀 295評論 0 0