值得反復(fù)品味的面向?qū)ο笤O(shè)計(jì)模式

本文原創(chuàng)该押,轉(zhuǎn)載請(qǐng)注明出處筒主。
歡迎關(guān)注我的 簡(jiǎn)書 撕捍,關(guān)注我的專題 Android Class 我會(huì)長(zhǎng)期堅(jiān)持為大家收錄簡(jiǎn)書上高質(zhì)量的 Android 相關(guān)博文迈嘹。

周末了擁有大塊時(shí)間师脂,是一個(gè)充電的好時(shí)機(jī),本文給大家?guī)碓O(shè)計(jì)模式的讀書筆記江锨,希望能給你帶來一些幫助。

前文:
值得反復(fù)品味的面向?qū)ο罅笤瓌t

設(shè)計(jì)模式

在軟件工程中糕篇,設(shè)計(jì)模式是對(duì)軟件設(shè)計(jì)中普遍存在啄育、反復(fù)出現(xiàn)的各種問題所提出的通用解決方案。這個(gè)術(shù)語是由 Erich Gamma 等人在1990 年從建筑設(shè)計(jì)領(lǐng)域引入到軟件工程領(lǐng)域拌消,從此設(shè)計(jì)模式在面向?qū)ο笤O(shè)計(jì)領(lǐng)域逐漸被重視起來挑豌。

設(shè)計(jì)模式并不直接用來完成代碼的編寫,而是描述在各種情況下要如何解決軟件設(shè)計(jì)問題墩崩。面向?qū)ο笤O(shè)計(jì)模式通常以類或?qū)ο髞砻枋銎渲械年P(guān)系和相互作用氓英,他們的相互作用能夠使軟件系統(tǒng)具有高內(nèi)聚、低耦合的特性鹦筹,并且使軟件能夠應(yīng)對(duì)變化铝阐。

模式的4個(gè)要素

模式名稱
模式名稱用一兩個(gè)詞來描述模式的問題、解決防范和效果铐拐∨羌基于一個(gè)模式詞匯表练对,同行、同事之間就可以通過它們進(jìn)行交流吹害,文檔中也可以通過模式名來代表一個(gè)設(shè)計(jì)螟凭。模式名可以幫助我們思考,便于我們與其他人交流設(shè)計(jì)思想以及設(shè)計(jì)結(jié)果它呀。

問題
描述了應(yīng)該在什么情況使用設(shè)計(jì)模式螺男。它解釋了設(shè)計(jì)問題和問題存在的前因后果,它可能描述了特定的設(shè)計(jì)問題纵穿,例如下隧,某個(gè)設(shè)計(jì)不具備良好的可擴(kuò)展性等,也可能描述了導(dǎo)致不靈活設(shè)計(jì)的類或者對(duì)象結(jié)構(gòu)政恍。

解決方案
描述了設(shè)計(jì)的組成成分汪拥,它們之間的相互關(guān)系以及各自的職責(zé)和協(xié)作方式。因?yàn)槟J骄拖褚粋€(gè)模板篙耗,可應(yīng)用于多種不同的場(chǎng)合迫筑,所以解決方案并不描述一個(gè)具體的設(shè)計(jì)或者實(shí)現(xiàn),而是提供設(shè)計(jì)問題的抽象描述和怎樣用一個(gè)具有一般意義的類或者對(duì)象組合來解決這個(gè)問題宗弯。

效果
描述了模式應(yīng)用的效果及使用模式應(yīng)權(quán)衡的問題脯燃。盡管我們描述設(shè)計(jì)決策時(shí),并不總提到模式效果蒙保,但它們對(duì)于評(píng)價(jià)設(shè)計(jì)選擇和理解使用模式的代價(jià)及好處具有重要意義辕棚。軟件效果大多關(guān)注對(duì)時(shí)間和空間的衡量,它們也表述了語言和實(shí)現(xiàn)問題邓厕。因?yàn)閺?fù)用是面向?qū)ο蟮脑O(shè)計(jì)要素之一逝嚎。所以模式效果包括對(duì)它系統(tǒng)的靈活性、擴(kuò)充性或可移植性的影響详恼,顯式地列出這些效果對(duì)理解和評(píng)價(jià)這些模式很有幫助补君。

設(shè)計(jì)模式為反復(fù)出現(xiàn)的局部軟件設(shè)計(jì)問題指出了通用的解決方案,在很大程度上促進(jìn)了面向?qū)ο筌浖こ痰陌l(fā)展昧互。它將這些常見的設(shè)計(jì)問題一一總結(jié)挽铁,將大師們的經(jīng)驗(yàn)、教訓(xùn)敞掘、設(shè)計(jì)經(jīng)驗(yàn)分享給了所有人叽掘,使得即便是剛剛?cè)胄械墓こ處煟材軌蛟O(shè)計(jì)出可擴(kuò)展玖雁、靈活的軟件系統(tǒng)更扁,大大提升了軟件質(zhì)量。關(guān)于設(shè)計(jì)模式領(lǐng)域的書籍大家可以參考《設(shè)計(jì)模式之禪》、《Android 源碼設(shè)計(jì)模式解析與實(shí)戰(zhàn)》疯潭。

避免掉進(jìn)過度設(shè)計(jì)的怪圈

當(dāng)你掌握一些設(shè)計(jì)模式或者手法之后赊堪,比較容易出現(xiàn)的問題就是過度設(shè)計(jì)。有的人甚至在一個(gè)應(yīng)用中一定要將 23 種常見的設(shè)計(jì)模式運(yùn)用上竖哩,這就本末倒置了哭廉。設(shè)計(jì)模式的四大要素中就明確指出,模式的運(yùn)用應(yīng)該根據(jù)軟件系統(tǒng)所面臨的問題來決定是否需要使用現(xiàn)有的設(shè)計(jì)相叁。也就是說遵绰,再出現(xiàn)問題或者你預(yù)計(jì)會(huì)出現(xiàn)那樣的問題時(shí),才推薦使用特定的設(shè)計(jì)模式增淹,而不是將各種設(shè)計(jì)模式套進(jìn)你的軟件中椿访。

不管在設(shè)計(jì)、實(shí)現(xiàn)虑润、測(cè)試之劍有多少時(shí)間都應(yīng)該避免過度設(shè)計(jì)成玫,它會(huì)打破你的反饋回路,使你的設(shè)計(jì)得不到反饋拳喻,從而慢慢陷入危險(xiǎn)中哭当。所以你只需要保持簡(jiǎn)單的設(shè)計(jì),這樣就有時(shí)間來測(cè)試該設(shè)計(jì)是否真的可行冗澈,然后作出最后的決策钦勘。

當(dāng)設(shè)計(jì)一款軟件時(shí),從整體高度上設(shè)定一種架構(gòu)模式亚亲,確定應(yīng)用的整體架構(gòu)彻采,然后再分析一些重要米快的設(shè)計(jì)思路,并且保證他們的簡(jiǎn)單性捌归、清晰性肛响,如果有時(shí)間可以使用 Java 代碼模擬一個(gè)簡(jiǎn)單的原型,確保設(shè)計(jì)是可行的惜索,最后就可以付諸行動(dòng)了特笋。切實(shí)不要過度的追求設(shè)計(jì),適當(dāng)就好门扇,當(dāng)我們發(fā)現(xiàn)或者預(yù)計(jì)到將要出現(xiàn)問題時(shí),在判斷是否需要運(yùn)用設(shè)計(jì)模式偿渡。

反模式

反模式是一種文字記錄形式臼寄,描述了對(duì)某個(gè)問題必然產(chǎn)生的消極后果的常見解決方案。由于管理人員或者開發(fā)人員不知道更好的解決方案溜宽,缺乏決定特定問題的經(jīng)驗(yàn)或知識(shí)吉拳,或者說不適合的條件下套用了某個(gè)設(shè)計(jì)模式,這些都會(huì)造成反模式适揉。與設(shè)計(jì)模式類似留攒,反模式描述了一個(gè)一般的形式煤惩,主要原因、典型癥狀炼邀。后果魄揉,以及最后如何通過重構(gòu)解決問題。

反模式是把一般情況映射到一類特定解決方案的有效方法拭宁。反模式的一般形式為它所針對(duì)的哪類問題提供了一個(gè)易于辨識(shí)的模板洛退。此外,它還清楚地說明了與該問題相關(guān)聯(lián)的癥狀以及導(dǎo)致這一問題的內(nèi)在原因:把特定設(shè)計(jì)模式應(yīng)用于不正確的環(huán)境杰标。

反模式為識(shí)別軟件行業(yè)反復(fù)出現(xiàn)的問題提供了實(shí)際經(jīng)驗(yàn)兵怯,并為大多數(shù)常見的問題提供了詳細(xì)的解決方案。反模式對(duì)業(yè)界常見的問題進(jìn)行總結(jié)腔剂,并且告訴你如何識(shí)別這些問題以及如何解決媒区。它有效的說明了可以在不同的層次上采取的措施,以便改善應(yīng)用開發(fā)過程掸犬,軟件系統(tǒng)和對(duì)軟件項(xiàng)目的有效管理袜漩。

總的來說,設(shè)計(jì)模式總結(jié)了在特定問題下正確的解決方案登渣,而反模式則是告訴你在特定問題上的錯(cuò)誤解決方案和他們的原因噪服、解決方案,通過最終的解決方案胜茧,它能夠?qū)⒏能浖到y(tǒng)拉回正軌粘优。

總結(jié)

靈活的軟件設(shè)計(jì)需要知識(shí)和經(jīng)驗(yàn)與思考,好的設(shè)計(jì)通常是經(jīng)歷了時(shí)間的洗禮慢慢演化而來呻顽,工程師的成長(zhǎng)也是一樣雹顺。因此,掌握必要的面向?qū)ο罄缺椤⒃O(shè)計(jì)模式嬉愧、反模式等知識(shí),并且這工作中不斷實(shí)踐喉前、思考没酣,將使你的軟件設(shè)計(jì)之路走得更加從容、順暢卵迂。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末裕便,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子见咒,更是在濱河造成了極大的恐慌偿衰,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,820評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異下翎,居然都是意外死亡缤言,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門视事,熙熙樓的掌柜王于貴愁眉苦臉地迎上來胆萧,“玉大人,你說我怎么就攤上這事郑口≡П蹋” “怎么了?”我有些...
    開封第一講書人閱讀 168,324評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵犬性,是天一觀的道長(zhǎng)瞻离。 經(jīng)常有香客問我,道長(zhǎng)乒裆,這世上最難降的妖魔是什么套利? 我笑而不...
    開封第一講書人閱讀 59,714評(píng)論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮鹤耍,結(jié)果婚禮上肉迫,老公的妹妹穿的比我還像新娘。我一直安慰自己稿黄,他們只是感情好喊衫,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,724評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著杆怕,像睡著了一般族购。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上陵珍,一...
    開封第一講書人閱讀 52,328評(píng)論 1 310
  • 那天寝杖,我揣著相機(jī)與錄音,去河邊找鬼互纯。 笑死瑟幕,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的留潦。 我是一名探鬼主播只盹,決...
    沈念sama閱讀 40,897評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼兔院!你這毒婦竟也來了殖卑?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,804評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤秆乳,失蹤者是張志新(化名)和其女友劉穎懦鼠,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體屹堰,經(jīng)...
    沈念sama閱讀 46,345評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡肛冶,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,431評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了扯键。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片睦袖。...
    茶點(diǎn)故事閱讀 40,561評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖荣刑,靈堂內(nèi)的尸體忽然破棺而出馅笙,到底是詐尸還是另有隱情,我是刑警寧澤厉亏,帶...
    沈念sama閱讀 36,238評(píng)論 5 350
  • 正文 年R本政府宣布董习,位于F島的核電站,受9級(jí)特大地震影響爱只,放射性物質(zhì)發(fā)生泄漏皿淋。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,928評(píng)論 3 334
  • 文/蒙蒙 一恬试、第九天 我趴在偏房一處隱蔽的房頂上張望窝趣。 院中可真熱鬧,春花似錦训柴、人聲如沸哑舒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽洗鸵。三九已至,卻和暖如春宣赔,著一層夾襖步出監(jiān)牢的瞬間预麸,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評(píng)論 1 272
  • 我被黑心中介騙來泰國打工儒将, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留吏祸,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,983評(píng)論 3 376
  • 正文 我出身青樓钩蚊,卻偏偏與公主長(zhǎng)得像贡翘,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子砰逻,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,573評(píng)論 2 359

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