設(shè)計(jì)模式(Design pattern)是一種思想,是一套被反復(fù)使用的代碼設(shè)計(jì)經(jīng)驗(yàn)總結(jié),專門(mén)用于解決特定場(chǎng)景的需求。它提供了在軟件開(kāi)發(fā)過(guò)程中面臨的一些問(wèn)題的最佳解決方案,使用設(shè)計(jì)模式是為了提高代碼的可重用性、讓代碼通俗易懂,增加代碼可靠性。
開(kāi)閉原則:對(duì)擴(kuò)展開(kāi)放,對(duì)修改關(guān)閉。就是如果要修改原有的功能或者是擴(kuò)展功能,盡量去擴(kuò)展原有的代碼,而不是修改原來(lái)已有的代碼。
里氏替換原則:任何子類對(duì)象都應(yīng)該可以替換其派生的超類對(duì)象 。即,子類可以擴(kuò)展父類的功能,但不要修改父類原有的功能。 也就是說(shuō),當(dāng)一個(gè)子類繼承父類后,盡量不要去重寫(xiě)它原有的方法。
依賴轉(zhuǎn)置(依賴倒置)原則:要面向接口編程,不要面向?qū)崿F(xiàn)編程。兩個(gè)模塊交互時(shí),都訪問(wèn)各自接口,而不是具體的實(shí)現(xiàn)類。
單一職責(zé)原則:一個(gè)對(duì)象要專注于一種事情,不要讓它擔(dān)任太多責(zé)任。
接口隔離原則:一個(gè)接口盡量只包含用戶關(guān)心的內(nèi)容。就是一個(gè)接口不要太龐大。
迪米特法則:如果兩個(gè)軟件實(shí)體之間不是特別必要,盡量不要讓他們直接通信。而是找個(gè)第三方進(jìn)行轉(zhuǎn)發(fā),比如使用MQ(消息隊(duì)列)。
合成復(fù)用原則:如果在“組合/聚合”和“繼承”之間做抉擇時(shí),優(yōu)先選擇“組合/聚合”。
創(chuàng)建型模式:用于創(chuàng)建對(duì)象的設(shè)計(jì)模式。一般可以簡(jiǎn)化用戶創(chuàng)建對(duì)象的過(guò)程。其次可以降低耦合度,用戶不需要關(guān)心對(duì)象具體的創(chuàng)建過(guò)程。包含:?jiǎn)卫J健⒃湍P汀⒐S模式、建造者模式。
結(jié)構(gòu)型模型:組織對(duì)象之間的結(jié)構(gòu)。使其易于擴(kuò)展等。包括:代理模式、適配器模式、橋接模式、裝飾器模式、外觀模式、享元模式、組合模式。
行為模型:主要用于決定對(duì)象如何做出行為包括:模板方法模式、策略模式、命令模式、責(zé)任鏈、狀態(tài)模式、觀察者模式、中介者模式、迭代器模式、訪問(wèn)者模式、備忘錄模式、解釋器模式。
1)提高代碼復(fù)用率,降低開(kāi)發(fā)成本和周期;
2)提高代碼可維護(hù)性、可拓展性;
3)使代碼更加優(yōu)雅、更容易被他人理解。
開(kāi)閉原則要求你的代碼對(duì)擴(kuò)展開(kāi)放,對(duì)修改關(guān)閉。這個(gè)意思就是說(shuō),如果你想增加一個(gè)新的功 能,你可以很容易的在不改變已測(cè)試過(guò)的代碼的前提下增加新的代碼。有好幾個(gè)設(shè)計(jì)模式是基 于開(kāi)閉原則的,如策略模式,如果你需要一個(gè)新的策略,只需要實(shí)現(xiàn)接口,增加配置,不需要 改變核心邏輯。一個(gè)正在工作的例子是 Collections.sort() 方法,這就是基于策略模式,遵循 開(kāi)閉原則的,你不需為新的對(duì)象修改 sort() 方法,你需要做的僅僅是實(shí)現(xiàn)你自己的 Comparator 接口。
如果兩個(gè)對(duì)象彼此有關(guān)系,就說(shuō)他們是彼此相關(guān)聯(lián)的。組合和聚合是面向?qū)ο笾械膬煞N形式的 關(guān)聯(lián)。組合是一種比聚合更強(qiáng)力的關(guān)聯(lián)。組合中,一個(gè)對(duì)象是另一個(gè)的擁有者,而聚合則是指 一個(gè)對(duì)象使用另一個(gè)對(duì)象。如果對(duì)象 A 是由對(duì)象 B 組合的,則 A 不存在的話,B一定不存在, 但是如果 A 對(duì)象聚合了一個(gè)對(duì)象 B,則即使 A 不存在了,B 也可以單獨(dú)存在。