博覽網(wǎng)--設(shè)計模式(一)

一唆樊、軟件的設(shè)計目標(biāo)

? ? ? ? ? ? ? ?復(fù)用


二霜运、面向?qū)ο笤O(shè)計原則

1 依賴導(dǎo)致原則(DIP):?

高層模塊不依賴于底層模塊脾歇, 二者都應(yīng)該依賴于抽象

抽象(穩(wěn)定)不依賴于實現(xiàn)細節(jié)(變化), 實現(xiàn)細節(jié)應(yīng)該依賴于抽象

2. 開放封閉原則(OCP)

對擴展開放觉渴, 對更改封閉

類模塊應(yīng)該可擴展介劫, 但是不可修改

3. 單一職責(zé)原則(SRP)

一個類應(yīng)該僅有一個引起它變化的原因

變化的方向隱含著累的責(zé)任。

4. Liskov替換原則(LSP)

子類必須能夠替換它們的基類(IS-A)

繼承表達類型抽象

5. 接口隔離原則 (ISP)

不應(yīng)該強迫客戶程序依賴它們不用的方法

接口應(yīng)該小而完備

6. 優(yōu)先使用對象組合案淋,而不是繼承

類繼承”白箱復(fù)用“座韵, 對象組合”黑箱復(fù)用“

繼承在某種程度上破化了封裝,子類父類耦合度高

對象組合則要求被組合的對象具有良好定義的接口, 耦合度低

7. 封裝變化點

使用封裝來創(chuàng)建對象之間的分界層誉碴, 讓設(shè)計者可以在分界層的一側(cè)進行修改宦棺, 而不會對另外一側(cè)產(chǎn)生不良的影響, 從而實現(xiàn)層次見的松耦合黔帕。?

8. 針對接口編程代咸,而不是針對實現(xiàn)編程

不將變量類型聲明為某特定的具體類,而是某個接口

客戶端無需知道對象具體類型成黄, 只需知道對象具有的接口

減少系統(tǒng)各個部分的依賴關(guān)系呐芥, 從而實現(xiàn)”高內(nèi)聚, 松耦合“的類型設(shè)計方案


三奋岁、設(shè)計模式分類

1. 目的: 創(chuàng)建型思瘟, 結(jié)構(gòu)型, 行為型

2. 范圍: 靜態(tài)闻伶,動態(tài)

3. 封裝變化:? 組件協(xié)作滨攻, 單一職責(zé), 對象性能

接口隔離蓝翰, 數(shù)據(jù)結(jié)構(gòu)光绕,行為變化,對象創(chuàng)建畜份,狀態(tài)變化诞帐, 領(lǐng)域問題

四、重構(gòu)

關(guān)鍵技法:

1.靜態(tài)-》動態(tài)

2. 早綁定-》晚綁定

3. 繼承-》組合

4. 編譯時依賴-》運行時依賴

5. 緊耦合-》松耦合


五爆雹、組件協(xié)作

1. Template Method

? ? ?1)使用虛函數(shù)多態(tài)為程序框架提供了擴展點景埃,是代碼復(fù)用方面的基本實現(xiàn)結(jié)構(gòu)

? ? ? 2) 不要調(diào)用我,讓我來調(diào)用你的反向控制結(jié)構(gòu)是 Template Method的典型應(yīng)用(運行時調(diào)用)

? ? 3)C++ 通過protected?

2. Strategy

? ? ?1) 子類提供了一系列可以重用的的算法 顶别, 從而可以使得類型在運行的時候方便的根據(jù)需要在各算法間切換

? ? ?2) 提供條件判斷語句外的另外一種選擇, 含有條件判斷語句代碼通常都需要strategy模式

? ? 3) Strategy 對象沒有實例拒啰, 那么各個上下文可以共享一個Strategy驯绎,從而可以節(jié)省對象空間。

3. Observer

? 1)獨立改變目標(biāo)和觀察者谋旦, 從而使得兩者依賴關(guān)系松耦合剩失。

? 2) 目標(biāo)發(fā)送通知, 無需指定觀察者册着,通知可以自動傳播拴孤。

?3)觀察者自己決定是否需要訂閱通知, 目標(biāo)對象對此一無所知甲捏。?

4) 基于時間的UI框架種常用的設(shè)計模式演熟, MVC模式。


六、單一職責(zé)

1.? Decorator

1) 采用組合非繼承的手法芒粹, 實現(xiàn)了動態(tài)擴展對象功能的能力兄纺;

2)使用 is a component 繼承關(guān)系, 繼承component 類所具有的接口化漆, 實現(xiàn)上表現(xiàn)為 has - a component的組合關(guān)系估脆。

3)主體類在多方向上的擴展功能。?

2.? ?Bridge

1) 使用對象間組合關(guān)系解耦了抽象和實現(xiàn)之間的固有綁定關(guān)系座云, 實現(xiàn)抽象和實現(xiàn)沿著各自維度變化疙赠, 即子類化。

2)類似多繼承

3) 一般在兩個/多個非常強的變化維度朦拖。?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末圃阳,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子贞谓,更是在濱河造成了極大的恐慌限佩,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件裸弦,死亡現(xiàn)場離奇詭異祟同,居然都是意外死亡,警方通過查閱死者的電腦和手機理疙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進店門晕城,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人窖贤,你說我怎么就攤上這事砖顷。” “怎么了赃梧?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵滤蝠,是天一觀的道長。 經(jīng)常有香客問我授嘀,道長物咳,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任蹄皱,我火速辦了婚禮览闰,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘巷折。我一直安慰自己压鉴,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布锻拘。 她就那樣靜靜地躺著油吭,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上上鞠,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天际邻,我揣著相機與錄音,去河邊找鬼芍阎。 笑死世曾,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的谴咸。 我是一名探鬼主播轮听,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼岭佳!你這毒婦竟也來了血巍?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤珊随,失蹤者是張志新(化名)和其女友劉穎述寡,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體叶洞,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡鲫凶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了衩辟。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片螟炫。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖艺晴,靈堂內(nèi)的尸體忽然破棺而出昼钻,到底是詐尸還是另有隱情,我是刑警寧澤封寞,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布然评,位于F島的核電站,受9級特大地震影響狈究,放射性物質(zhì)發(fā)生泄漏沾瓦。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一谦炒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧风喇,春花似錦宁改、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春谜喊,著一層夾襖步出監(jiān)牢的瞬間潭兽,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工斗遏, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留山卦,地道東北人。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓诵次,卻偏偏與公主長得像账蓉,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子逾一,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,627評論 2 350

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

  • 設(shè)計模式匯總 一铸本、基礎(chǔ)知識 1. 設(shè)計模式概述 定義:設(shè)計模式(Design Pattern)是一套被反復(fù)使用、多...
    MinoyJet閱讀 3,922評論 1 15
  • 設(shè)計模式基本原則 開放-封閉原則(OCP)遵堵,是說軟件實體(類箱玷、模塊、函數(shù)等等)應(yīng)該可以拓展陌宿,但是不可修改锡足。開-閉原...
    西山薄涼閱讀 3,777評論 3 14
  • 一、設(shè)計模式的分類 總體來說設(shè)計模式分為三大類: 創(chuàng)建型模式限番,共五種:工廠方法模式舱污、抽象工廠模式、單例模式弥虐、建造者...
    RamboLI閱讀 748評論 0 1
  • 1 場景問題# 1.1 發(fā)送提示消息## 考慮這樣一個實際的業(yè)務(wù)功能:發(fā)送提示消息扩灯。基本上所有帶業(yè)務(wù)流程處理的系統(tǒng)...
    七寸知架構(gòu)閱讀 4,993評論 5 63
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法霜瘪,類相關(guān)的語法珠插,內(nèi)部類的語法,繼承相關(guān)的語法颖对,異常的語法捻撑,線程的語...
    子非魚_t_閱讀 31,599評論 18 399