1. 前言
斷斷續(xù)續(xù)寫了一段時間的設(shè)計模式,終于把經(jīng)典的23種設(shè)計模式全寫完了混滔。下面對這些設(shè)計模式總結(jié)一下广恢。
2. 設(shè)計原則
設(shè)計原則的介紹 : [設(shè)計模式的六大原則]
即使我們之前沒有專門看過這些原則绞愚,但是我們實際開發(fā)中或多或少都用到這些原則。實際上秧耗,這些原則的目的只有一個:降低對象之間的耦合,增加程序的可復(fù)用性舶治、可擴展性分井、可維護性。優(yōu)秀的設(shè)計模式就是基于這些原則去實現(xiàn)的霉猛。
3. 設(shè)計模式的分類
設(shè)計模式一般分為三類:創(chuàng)建型模式杂抽、結(jié)構(gòu)型模式、行為型模式韩脏。
3.1 創(chuàng)建型模式
創(chuàng)建型模式簡單來說就是用來創(chuàng)建對象的缩麸。一共有五種:單例模式、建造者模式赡矢、工廠方法模式杭朱、抽象工廠模式、原型模式吹散。
[單例模式] :確保某一個類只有一個實例弧械,并且提供一個全局訪問點。
[建造者模式]: 用來創(chuàng)建復(fù)雜的復(fù)合對象空民。
[工廠方法模式]:讓子類來決定要創(chuàng)建哪個對象刃唐。
[抽象工廠模式:創(chuàng)建多個產(chǎn)品族中的產(chǎn)品對象。
[原型模式]:通過復(fù)制原型來創(chuàng)建新對象界轩。
3.2 行為型模式
行為型模式主要是描述類或者對象是怎樣交互和怎樣分配職責(zé)的画饥。一共有十一種:策略模式、模板方法模式浊猾、觀察者模式抖甘、迭代器模式、責(zé)任鏈模式葫慎、命令模式衔彻、備忘錄模式薇宠、狀態(tài)模式、訪問者模式艰额、中介者模式澄港、解釋器模式。
[策略模式]:封裝不同的算法柄沮,算法之間能互相替換慢睡。
[狀態(tài)模式] :根據(jù)不同的狀態(tài)做出不同的行為。
[責(zé)任鏈模式] :將事件沿著鏈去處理铡溪。
[觀察者模式]:狀態(tài)發(fā)生改變時通知觀察者漂辐,一對多的關(guān)系。
[模板方法模式]:定義一套流程模板棕硫,根據(jù)需要實現(xiàn)模板中的操作髓涯。
[迭代器模式] :提供一種方法順序訪問一個聚合對象中的各個元素。
[備忘錄模式] :保存對象的狀態(tài)哈扮,在需要時進行恢復(fù)纬纪。
[訪問者模式] :穩(wěn)定數(shù)據(jù)結(jié)構(gòu)中,定義新的操作行為滑肉。
[中介者模式]:將網(wǎng)狀結(jié)構(gòu)轉(zhuǎn)變?yōu)樾切徒Y(jié)構(gòu)包各,所有行為都通過中介。
[解釋器模式] :定義語法靶庙,并對其進行解釋问畅。
[命令模式]:將請求封裝成命令,并記錄下來六荒,能夠撤銷與重做护姆。
3.3 結(jié)構(gòu)型模式
結(jié)構(gòu)型模式主要是用于處理類或者對象的組合。一共有七種:適配器模式掏击、裝飾模式卵皂、代理模式、外觀模式砚亭、橋接模式灯变、組合模式、享元模式捅膘。
[代理模式] :控制客戶端對對象的訪問添祸。
[組合模式]:將整體與局部(樹形結(jié)構(gòu))進行遞歸組合,讓客戶端能夠以一種的方式對其進行處理篓跛。
[適配器模式] :將原來不兼容的兩個類融合在一起膝捞。
[裝飾者模式] :為對象添加新功能。
[享元模式] :使用對象池來減少重復(fù)對象的創(chuàng)建愧沟。
[外觀模式] :對外提供一個統(tǒng)一的接口用來訪問子系統(tǒng)蔬咬。
[橋接模式]:將兩個能夠獨立變化的部分分離開來。
4. 其他設(shè)計模式
另外沐寺,除了這23種經(jīng)典的設(shè)計模式林艘,還涌現(xiàn)出其他的一些新的設(shè)計模式,比如:規(guī)格模式混坞、對象池模式狐援、雇工模式、黑板模式和空對象模式等等究孕。后面有時間的話也會對這些模式進行分析啥酱。
5.最后
雖然設(shè)計模式是個好東西,能夠給我們帶來各種好處厨诸,比如降低對象之間的耦合镶殷,增加程序的可復(fù)用性、可擴展性微酬、可維護性等等绘趋。
但是我們也不應(yīng)該濫用設(shè)計模式,設(shè)計模式在一定程序上會增加系統(tǒng)的復(fù)雜性颗管。我們在寫碼時應(yīng)該評估好各方面陷遮,避免過度設(shè)計。
另外垦江,設(shè)計模式的各種角色也不是固定不變的帽馋,根據(jù)實際需要,我們可以適當(dāng)?shù)倪M行改動比吭。Android的源碼在這方面的改動就比較多茬斧。
由于上面那23種經(jīng)典的設(shè)計模式提出來的時間也比較久了,一些設(shè)計模式梗逮,比如解釋器模式项秉,在我們的實際開發(fā)中基本上用不到,了解一下就可以了慷彤。同時娄蔼,隨著語言和技術(shù)的發(fā)展,有些模式可能已經(jīng)過時底哗。所以岁诉,我們要緊跟時代的發(fā)展。
End
順便在此給大家推薦一個Java方面的交流學(xué)習(xí)群:4112676跋选,里面會分享一些高級面試題涕癣,還有資深架構(gòu)師錄制的視頻錄像:有Spring,MyBatis前标,Netty源碼分析坠韩,高并發(fā)距潘、高性能、分布式只搁、微服務(wù)架構(gòu)的原理音比,JVM性能優(yōu)化這些成為架構(gòu)師必備的知識體系,主要針對Java開發(fā)人員提升自己氢惋,突破瓶頸洞翩,相信你來學(xué)習(xí),會有提升和收獲焰望。在這個群里會有你需要的內(nèi)容 朋友們請抓緊時間加入進來吧