什么叫設(shè)計(jì)模式
設(shè)計(jì)模式是一套被反復(fù)使用的壤蚜、多數(shù)人知曉的、經(jīng)過(guò)分類編目的徊哑、代碼設(shè)計(jì)經(jīng)驗(yàn)的總結(jié)袜刷。
為什么使用設(shè)計(jì)模式
使用設(shè)計(jì)模式是為了重用代碼、讓代碼更容易被他人理解莺丑、保證代碼可靠性著蟹。
解決什么問(wèn)題
項(xiàng)目中合理地運(yùn)用設(shè)計(jì)模式可以完美地解決很多問(wèn)題,每種模式在現(xiàn)實(shí)中都有相應(yīng)的原理來(lái)與之對(duì)應(yīng)梢莽,每種模式都描述了一個(gè)在我們周圍不斷重復(fù)發(fā)生的問(wèn)題萧豆,以及該問(wèn)題的核心解決方案,這也是設(shè)計(jì)模式能被廣泛應(yīng)用的原因昏名。
設(shè)計(jì)模式的特征
■模式發(fā)現(xiàn)過(guò)程中需要遵循大三律涮雷,即只有經(jīng)過(guò)三個(gè)以上不同類型(或不同領(lǐng)域)的系統(tǒng)的檢驗(yàn),一個(gè)解決方案才能從候選模式升格為模式轻局。
■一套被反復(fù)使用洪鸭、多數(shù)人知曉的、經(jīng)過(guò)分類編目的仑扑、代碼設(shè)計(jì)經(jīng)驗(yàn)的總結(jié)览爵,是為了可重用代碼、讓代碼更容易被他人理解镇饮、保證代碼可靠性蜓竹。
GoF設(shè)計(jì)模式
常用的面向?qū)ο笤O(shè)計(jì)原則
(面向?qū)ο笤O(shè)計(jì)原則和設(shè)計(jì)模式是對(duì)系統(tǒng)進(jìn)行合理重構(gòu)的指南針? )
單一職責(zé)原則:一個(gè)對(duì)象應(yīng)該只包含單一的職責(zé),并且該職責(zé)被完整的封裝在一個(gè)類(模塊)中
????????????分析:承擔(dān)的責(zé)任越多盒让,可復(fù)用性越小
????????????????????????實(shí)現(xiàn)高內(nèi)聚低耦合
開(kāi)閉原則:對(duì)擴(kuò)展開(kāi)放梅肤,對(duì)修改關(guān)閉。也就是說(shuō)在設(shè)計(jì)一個(gè)模塊的時(shí)候邑茄,應(yīng)當(dāng)使這個(gè)模塊在不被修改的前提下被擴(kuò)展姨蝴,即實(shí)現(xiàn)在不修改源代碼的情況下改變這個(gè)模塊的行為
? ? ? ? ? ?分析:軟件實(shí)體可以指一個(gè)軟件模塊、多個(gè)類組成的局部結(jié)構(gòu)或一個(gè)獨(dú)立的類肺缕。
? ? ? ? ? ? ? ? ? ? ? ?抽象化是開(kāi)閉原則的關(guān)鍵左医。
? ? ? ? ? ? ? ? ? ? ? ?可以通過(guò)“對(duì)可變性封裝原則”來(lái)描述,對(duì)可變性封裝原則要求找到系統(tǒng)的可變因素并將其封裝起來(lái)同木。
里氏代換原則:一個(gè)可以接受基類對(duì)象的地方必然可以接受一個(gè)子類對(duì)象浮梢。(所有引用基類(父類)的地方必須能透明地使用其子類的對(duì)象。)
? ? ? ? ? ? ?分析:如果能夠使用基類對(duì)象彤路,那么一定能夠使用其子類對(duì)象秕硝。把基類都替換成它的子類,程序?qū)⒉粫?huì)產(chǎn)生任何錯(cuò)誤和異常洲尊,反過(guò)來(lái)則不成立远豺,如果一個(gè)軟件實(shí)體使用的是一個(gè)子類的話奈偏,那么它不一定能夠使用基類。
????????????????????????實(shí)現(xiàn)開(kāi)閉原則的重要方式之一躯护,程序中盡量使用基類類型來(lái)對(duì)對(duì)象進(jìn)行定義惊来,而在運(yùn)行時(shí)再確定其子類類型,用子類對(duì)象來(lái)替換父類對(duì)象棺滞。
依賴倒轉(zhuǎn)原則:要針對(duì)抽象層編程裁蚁,而不是針對(duì)具體類編程
? ? ? ? ? ? 分析:代碼要依賴于抽象的類,而不要依賴于具體的類继准;要針對(duì)接口或抽象類編程枉证,而不是針對(duì)具體類編程。
????????????????????????依賴倒轉(zhuǎn)原則就是面向?qū)ο笤O(shè)計(jì)的主要手段锰瘸。
????????????????????????依賴倒轉(zhuǎn)原則的常用實(shí)現(xiàn)方式之一是在代碼中使用抽象類刽严,而將具體類放在配置文件中昂灵。
接口隔離原則:使用多個(gè)專門的接口來(lái)取代一個(gè)統(tǒng)一的接口
? ? ? ? ? ? ? ?分析:首先必須滿足單一職責(zé)原則避凝,將一組相關(guān)的操作定義在一個(gè)接口中,且在滿足高內(nèi)聚的前提下眨补,接口中的方法越少越好管削。
????????????????????????????可以在進(jìn)行系統(tǒng)設(shè)計(jì)時(shí)采用定制服務(wù)的方式,即為不同的客戶端提供寬窄不同的接口撑螺,只提供用戶需要的行為含思,而隱藏用戶不需要的行為。
合成復(fù)用原則: 盡量多使用組合和聚合關(guān)聯(lián)關(guān)系甘晤,少用甚至不用繼承關(guān)系
? ? ? ? ? ? ? ?分析:繼承復(fù)用:實(shí)現(xiàn)簡(jiǎn)單含潘,易于擴(kuò)展。破壞系統(tǒng)的封裝性线婚;從基類繼承而來(lái)的實(shí)現(xiàn)是靜態(tài)的遏弱,不可能在運(yùn)行時(shí)發(fā)生改變,沒(méi)有足夠的靈活性塞弊;只能在有限的環(huán)境中使用漱逸。(“白箱"復(fù)用)
????????????????????????????組合/聚合復(fù)用:耦合度相對(duì)較低,選擇性地調(diào)用成員對(duì)象的操作游沿;可以在運(yùn)行時(shí)動(dòng)態(tài)進(jìn)行饰抒。(“黑箱"復(fù)用)
迪米特法則:一個(gè)軟件實(shí)體對(duì)其他實(shí)體的引用越少越好?
? ? ? ? ? ? ? ? 分析:一個(gè)軟件實(shí)體應(yīng)當(dāng)盡可能少的與其他實(shí)體發(fā)生相互作用。
設(shè)計(jì)模式的三種類型? 都有那些
? 創(chuàng)建型 :對(duì)象實(shí)例化的模式诀黍,創(chuàng)建型模式用于解耦對(duì)象的實(shí)例化過(guò)程
? 結(jié)構(gòu)型:把類或?qū)ο蠼Y(jié)合在一起形成一個(gè)更大的結(jié)構(gòu)袋坑。
? 行為型 :類和對(duì)象如何交互,及劃分責(zé)任和算法
創(chuàng)建型:創(chuàng)建型模式對(duì)類的實(shí)例化過(guò)程進(jìn)行抽象眯勾,將軟件模塊中對(duì)象的創(chuàng)建和對(duì)象的使用進(jìn)行分離枣宫。外界對(duì)于這些對(duì)象只需知道它們共同的接口疆柔,隱藏了類的實(shí)例的創(chuàng)建細(xì)節(jié),通過(guò)隱藏對(duì)象如何被創(chuàng)建和組合在一起達(dá)到使整個(gè)系統(tǒng)獨(dú)立的目的镶柱。
創(chuàng)建型模式:簡(jiǎn)單工廠? 工廠方法? ? 抽象工廠? 建造者模式
結(jié)構(gòu)型:描述如何將類或者對(duì)象結(jié)合在一起形成更大的結(jié)構(gòu)旷档。結(jié)構(gòu)型模式可以分為類結(jié)構(gòu)性模式和對(duì)象結(jié)構(gòu)型模式
結(jié)構(gòu)型模式:適配器? 代理模式? 橋接模式? 外觀模式? 享元模式
行為型:1.行為型模式是對(duì)在不同的對(duì)象之間劃分責(zé)任和算法的抽象化
2.行為型模式關(guān)注類和對(duì)象的結(jié)構(gòu),并重點(diǎn)關(guān)注他們之間的相互作用
3.通過(guò)行為型模式歇拆,可以更加清晰的劃分類與對(duì)象的職責(zé)鞋屈,并研究系統(tǒng)在運(yùn)行時(shí)實(shí)例對(duì)象之間的交互
4.行為型模式分為類行為型和對(duì)象行為型模式兩種。(1)類行為型模式使用繼承關(guān)系在幾個(gè)類之間分配行為(2)對(duì)象的行為型模式則使用對(duì)象的聚合關(guān)聯(lián)關(guān)系來(lái)分配行為
行為型模式:職責(zé)鏈模式? 觀察者模式? 命令模式? 解釋器模式? 迭代器模式? 中介者模式? 備忘錄模式? 狀態(tài)模式? 策略模式
淺顯理解故觅,如有錯(cuò)誤厂庇,請(qǐng)及時(shí)指正批評(píng)!J淅簟权旷!