設(shè)計(jì)模式簡(jiǎn)述

  • 設(shè)計(jì)模式是軟件開發(fā)人員在軟件開發(fā)過(guò)程中面臨的一般問(wèn)題的解決方案努隙。這些解決方案是眾多軟件開發(fā)人員經(jīng)過(guò)相當(dāng)長(zhǎng)的一段時(shí)間的試驗(yàn)和錯(cuò)誤總結(jié)出來(lái)的绢彤。

  • 設(shè)計(jì)模式是一套被反復(fù)使用的、多數(shù)人知曉的、經(jīng)過(guò)分類編目的、代碼設(shè)計(jì)經(jīng)驗(yàn)的總結(jié)峻黍。

  • 設(shè)計(jì)模式是為了重用代碼、讓代碼更容易被他人理解拨匆、保證代碼可靠性姆涩。

  • 設(shè)計(jì)模式可以完美地解決很多問(wèn)題,每種模式在現(xiàn)實(shí)中都有相應(yīng)的原理來(lái)與之對(duì)應(yīng)惭每,每種模式都描述了一個(gè)在我們周圍不斷重復(fù)發(fā)生的問(wèn)題骨饿,以及該問(wèn)題的核心解決方案。

六大原則

單一職責(zé)原則 SRP(Single Responsibility Principle)

一個(gè)類只負(fù)責(zé)一個(gè)功能領(lǐng)域的職責(zé)台腥。各個(gè)職責(zé)的程序改動(dòng)宏赘,不影響其它程序。

優(yōu)點(diǎn):降低類和類的耦合黎侈,提高可讀性察署,增加可維護(hù)性和可拓展性,降低可變性的風(fēng)險(xiǎn)蜓竹。

里氏替換原則 LSP(liskov substitution principle)

使用的基類可以在任何地方使用繼承的子類箕母,完美的替換基類储藐。子類可以擴(kuò)展父類的功能俱济,但不能改變父類原有的功能。子類可以實(shí)現(xiàn)父類的抽象方法钙勃,但不能覆蓋父類的非抽象方法蛛碌,子類中可以增加自己特有的方法。

優(yōu)點(diǎn):增加程序的健壯性辖源,即使增加了子類蔚携,原有的子類還可以繼續(xù)運(yùn)行希太,互不影響。

依賴倒置原則 DIP(dependence inversion principle)

要針對(duì)接口編程酝蜒,而不是針對(duì)實(shí)現(xiàn)編程誊辉。高層次的模塊不應(yīng)該依賴于低層次的模塊,他們都應(yīng)該依賴于抽象亡脑,抽象不應(yīng)該依賴于具體實(shí)現(xiàn)堕澄,具體實(shí)現(xiàn)應(yīng)該依賴于抽象。

優(yōu)點(diǎn):可以減少需求變化帶來(lái)的工作量霉咨,做并行開發(fā)更加友好蛙紫。

接口隔離原則 ISP(interface segregation principle)

類和類之間應(yīng)該建立在最小接口的上。使用多個(gè)專門的接口途戒,而不使用單一的總接口坑傅,即客戶端不應(yīng)該依賴那些它不需要的接口。每一個(gè)接口應(yīng)該承擔(dān)一種相對(duì)獨(dú)立的角色喷斋。注意控制接口的粒度.

優(yōu)點(diǎn):提高程序的靈活度唁毒,提高內(nèi)聚,減少對(duì)外交互星爪,使得最小的接口做最多的事情枉证。

迪米特法則(law of demeter LOD)

一個(gè)對(duì)象應(yīng)當(dāng)對(duì)其他對(duì)象有盡可能少地關(guān)聯(lián),簡(jiǎn)稱類間解耦移必。一個(gè)類盡量減少自己對(duì)其他對(duì)象的依賴室谚,原則是低耦合,高內(nèi)聚崔泵,只有使各個(gè)模塊之間的耦合盡量的低秒赤,才能提高代碼的復(fù)用率。

優(yōu)點(diǎn):低耦合憎瘸,高內(nèi)聚入篮。使類與類之間保持松散的耦合關(guān)系。

開放封閉原則(open closed principle)

思想:盡量通過(guò)擴(kuò)展軟件實(shí)體來(lái)解決需求變化幌甘,而不是通過(guò)修改已有的代碼來(lái)完成變化潮售。一個(gè)軟件實(shí)體應(yīng)當(dāng)對(duì)擴(kuò)展開放,對(duì)修改關(guān)閉锅风。

優(yōu)點(diǎn):?jiǎn)我辉瓌t告訴我們酥诽,每個(gè)類都有自己負(fù)責(zé)的職責(zé),里氏替換原則不能破壞繼承關(guān)系的體系皱埠。

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

創(chuàng)建型模式

主要特點(diǎn)是“將對(duì)象的創(chuàng)建與使用分離”肮帐。可以降低系統(tǒng)的耦合度,使用者不需要關(guān)注對(duì)象的創(chuàng)建細(xì)節(jié)训枢,對(duì)象的創(chuàng)建由相關(guān)的工廠來(lái)完成托修。

  • 工廠模式(Factory):定義一個(gè)用于創(chuàng)建產(chǎn)品的接口,由子類決定生產(chǎn)什么產(chǎn)品恒界。
  • 抽象工廠模式(Abstract Factory):提供一個(gè)創(chuàng)建產(chǎn)品族的接口皱卓,其每個(gè)子類可以生產(chǎn)一系列相關(guān)的產(chǎn)品墓卦。
  • 單例模式(Singleton):某個(gè)類只能生成一個(gè)實(shí)例枚粘,該類提供了一個(gè)全局訪問(wèn)點(diǎn)供外部獲取該實(shí)例吨拍,其拓展是有限多例模式。
  • 建造者模式(Builder):將一個(gè)復(fù)雜對(duì)象分解成多個(gè)相對(duì)簡(jiǎn)單的部分婆誓,然后根據(jù)不同需要分別創(chuàng)建它們吃环,最后構(gòu)建成該復(fù)雜對(duì)象。
  • 原型模式(Prototype):將一個(gè)對(duì)象作為原型洋幻,通過(guò)對(duì)其進(jìn)行復(fù)制而克隆出多個(gè)和原型類似的新實(shí)例郁轻。

結(jié)構(gòu)型模式

關(guān)注類和對(duì)象的組合,采用繼承的概念來(lái)組合接口和定義組合對(duì)象文留。它分為類結(jié)構(gòu)型模式和對(duì)象結(jié)構(gòu)型模式好唯,前者采用繼承機(jī)制來(lái)組織接口和類,后者釆用組合或聚合來(lái)組合對(duì)象燥翅。

  • 適配器模式(Adapter):將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口骑篙,使得原本由于接口不兼容而不能一起工作的那些類能一起工作。
  • 橋接模式(Bridge):將抽象與實(shí)現(xiàn)分離森书,使它們可以獨(dú)立變化靶端。它是用組合關(guān)系代替繼承關(guān)系來(lái)實(shí)現(xiàn)的,從而降低了抽象和實(shí)現(xiàn)這兩個(gè)可變維度的耦合度凛膏。
  • 組合模式(Composite):將對(duì)象組合成樹狀層次結(jié)構(gòu)杨名,使用戶對(duì)單個(gè)對(duì)象和組合對(duì)象具有一致的訪問(wèn)性。
  • 裝飾器模式(Decorator):動(dòng)態(tài)地給對(duì)象增加一些職責(zé)猖毫,即增加其額外的功能台谍。
  • 外觀模式(Facade):為多個(gè)復(fù)雜的子系統(tǒng)提供一個(gè)一致的接口,使這些子系統(tǒng)更加容易被訪問(wèn)吁断。
  • 享元模式(Flyweight):運(yùn)用共享技術(shù)來(lái)有效地支持大量細(xì)粒度對(duì)象的復(fù)用趁蕊。
  • 代理模式(Proxy ):為某對(duì)象提供一種代理以控制對(duì)該對(duì)象的訪問(wèn)。即客戶端通過(guò)代理間接地訪問(wèn)該對(duì)象仔役,從而限制掷伙、增強(qiáng)或修改該對(duì)象的一些特性。

行為型模式

行為型模式用于描述程序在運(yùn)行時(shí)復(fù)雜的流程控制骂因,即描述多個(gè)類或?qū)ο笾g怎樣相互協(xié)作共同完成單個(gè)對(duì)象都無(wú)法單獨(dú)完成的任務(wù)炎咖,它涉及算法與對(duì)象間職責(zé)的分配。

行為型模式分為類行為模式和對(duì)象行為模式寒波,前者采用繼承機(jī)制來(lái)在類間分派行為乘盼,后者采用組合或聚合在對(duì)象間分配行為。

  • 模板方法(Template)模式:定義一個(gè)操作中的算法骨架俄烁,將算法的一些步驟延遲到子類中绸栅,使得子類在可以不改變?cè)撍惴ńY(jié)構(gòu)的情況下重定義該算法的某些特定步驟。
  • 策略(Strategy)模式:定義了一系列算法页屠,并將每個(gè)算法封裝起來(lái)粹胯,使它們可以相互替換,且算法的改變不會(huì)影響使用算法的客戶辰企。
  • 命令(Command)模式:將一個(gè)請(qǐng)求封裝為一個(gè)對(duì)象风纠,使發(fā)出請(qǐng)求的責(zé)任和執(zhí)行請(qǐng)求的責(zé)任分割開。
  • 職責(zé)鏈(Chain of Responsibility)模式:把請(qǐng)求從鏈中的一個(gè)對(duì)象傳到下一個(gè)對(duì)象牢贸,直到請(qǐng)求被響應(yīng)為止竹观。通過(guò)這種方式去除對(duì)象之間的耦合。
  • 狀態(tài)(State)模式:允許一個(gè)對(duì)象在其內(nèi)部狀態(tài)發(fā)生改變時(shí)改變其行為能力潜索。
  • 觀察者(Observer)模式:多個(gè)對(duì)象間存在一對(duì)多關(guān)系臭增,當(dāng)一個(gè)對(duì)象發(fā)生改變時(shí),把這種改變通知給其他多個(gè)對(duì)象竹习,從而影響其他對(duì)象的行為誊抛。
  • 中介者(Mediator)模式:定義一個(gè)中介對(duì)象來(lái)簡(jiǎn)化原有對(duì)象之間的交互關(guān)系,降低系統(tǒng)中對(duì)象間的耦合度整陌,使原有對(duì)象之間不必相互了解拗窃。
  • 迭代器(Iterator)模式:提供一種方法來(lái)順序訪問(wèn)聚合對(duì)象中的一系列數(shù)據(jù),而不暴露聚合對(duì)象的內(nèi)部表示泌辫。
  • 訪問(wèn)者(Visitor)模式:在不改變集合元素的前提下并炮,為一個(gè)集合中的每個(gè)元素提供多種訪問(wèn)方式,即每個(gè)元素有多個(gè)訪問(wèn)者對(duì)象訪問(wèn)甥郑。
  • 備忘錄(Memento)模式:在不破壞封裝性的前提下逃魄,獲取并保存一個(gè)對(duì)象的內(nèi)部狀態(tài),以便以后恢復(fù)它澜搅。
  • 解釋器(Interpreter)模式:提供如何定義語(yǔ)言的文法伍俘,以及對(duì)語(yǔ)言句子的解釋方法,即解釋器勉躺。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末癌瘾,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子饵溅,更是在濱河造成了極大的恐慌妨退,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,525評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異咬荷,居然都是意外死亡冠句,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門幸乒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)懦底,“玉大人,你說(shuō)我怎么就攤上這事罕扎【厶疲” “怎么了?”我有些...
    開封第一講書人閱讀 164,862評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵腔召,是天一觀的道長(zhǎng)杆查。 經(jīng)常有香客問(wèn)我,道長(zhǎng)臀蛛,這世上最難降的妖魔是什么亲桦? 我笑而不...
    開封第一講書人閱讀 58,728評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮掺栅,結(jié)果婚禮上烙肺,老公的妹妹穿的比我還像新娘。我一直安慰自己氧卧,他們只是感情好桃笙,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著沙绝,像睡著了一般搏明。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上闪檬,一...
    開封第一講書人閱讀 51,590評(píng)論 1 305
  • 那天星著,我揣著相機(jī)與錄音,去河邊找鬼粗悯。 笑死虚循,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的样傍。 我是一名探鬼主播横缔,決...
    沈念sama閱讀 40,330評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼衫哥!你這毒婦竟也來(lái)了茎刚?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,244評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤撤逢,失蹤者是張志新(化名)和其女友劉穎膛锭,沒(méi)想到半個(gè)月后粮坞,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,693評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡初狰,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評(píng)論 3 336
  • 正文 我和宋清朗相戀三年莫杈,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片跷究。...
    茶點(diǎn)故事閱讀 40,001評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡姓迅,死狀恐怖敲霍,靈堂內(nèi)的尸體忽然破棺而出俊马,到底是詐尸還是另有隱情,我是刑警寧澤肩杈,帶...
    沈念sama閱讀 35,723評(píng)論 5 346
  • 正文 年R本政府宣布柴我,位于F島的核電站,受9級(jí)特大地震影響扩然,放射性物質(zhì)發(fā)生泄漏艘儒。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評(píng)論 3 330
  • 文/蒙蒙 一夫偶、第九天 我趴在偏房一處隱蔽的房頂上張望界睁。 院中可真熱鬧,春花似錦兵拢、人聲如沸翻斟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)访惜。三九已至,卻和暖如春腻扇,著一層夾襖步出監(jiān)牢的瞬間债热,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工幼苛, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留窒篱,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,191評(píng)論 3 370
  • 正文 我出身青樓舶沿,卻偏偏與公主長(zhǎng)得像墙杯,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子暑椰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評(píng)論 2 355