發(fā)布說明
其實不用設(shè)計模式并非不可以,但是用好設(shè)計模式能幫助我們更好地解決實際問題。
設(shè)計模式天天都在用,但自己卻無感知。
本系列文章,初衷是為了記錄日常經(jīng)常使用的設(shè)計模式,也給學(xué)習(xí)設(shè)計模式的同學(xué)們提供參考和查閱。
文章內(nèi)容有自己的理解,也有參考網(wǎng)絡(luò),如有侵犯,請告知刪除。
學(xué)習(xí)設(shè)計模式的重要性
設(shè)計模式最重要的是解耦。
學(xué)習(xí)設(shè)計模式是如何總結(jié)經(jīng)驗的,把經(jīng)驗為自己所用。
學(xué)設(shè)計模式也是鍛煉將業(yè)務(wù)需求轉(zhuǎn)換技術(shù)實現(xiàn)的一種非常有效的方式。
設(shè)計模式的基石
我們在學(xué)習(xí)設(shè)計模式之前,建議大家,一定要掌握好設(shè)計模式的幾大原則,《設(shè)計模式之禪》一書中開篇就是講的是設(shè)計原則;
所以在本篇文章中,在這里先對設(shè)計原則做一個回顧和總結(jié)。
| 設(shè)計原則 | 解釋 |
|---|---|
| 開閉原則 | 對擴展開放,對修改關(guān)閉。 |
| 依賴倒置原則 | 通過抽象使各個類或者模塊不相互影響,實現(xiàn)松耦合。 |
| 單一職責原則 | 一個類、接口、方法只做一件事。 |
| 接口隔離原則 | 盡量保證接口的純潔性,客戶端不應(yīng)該依賴不需要的接口。 |
| 迪米特法則 | 又叫最少知道原則,一個類對其所依賴的類知道得越少越好。 |
| 里氏替換原則 | 子類可以擴展父類的功能但不能改變父類原有的功能。 |
| 合成復(fù)用原則 | 盡量使用對象組合、聚合,而不使用繼承關(guān)系達到代碼復(fù)用的目的。 |
經(jīng)典框架都在用設(shè)計模式解決問題
Spring 就是一個把設(shè)計模式用得淋漓盡致的經(jīng)典框架,其實從類的命名就能看出來,我
來一一列舉:
| 設(shè)計模式名稱 | 舉例 |
|---|---|
| 工廠模式 | BeanFactory |
| 裝飾器模式 | BeanWrapper |
| 代理模式 | AopProxy |
| 委派模式 | DispatcherServlet |
| 策略模式 | HandlerMapping |
| 適配器模式 | HandlerAdapter |
| 模板模式 | JdbcTemplate |
| 觀察者模式 | ContextLoaderListener |
設(shè)計模式分類
<table style="border-collapse: collapse;border:1px solid #f6f6f6;">
<thead>
<tr>
<th>類型</th>
<th>名稱</th>
<th>英文</th>
</tr>
</thead>
<tbody>
<tr>
<td rowspan="3">創(chuàng)建型模式</td>
<td>工廠模式</td>
<td>Factory Patterns</td>
</tr>
<tr>
<td>單例模式</td>
<td>Singleton Pattern</td>
</tr>
<tr>
<td>原型模式</td>
<td>Prototype Pattern</td>
</tr>
<tr>
<td rowspan="3">結(jié)構(gòu)型模式</td>
<td>適配器模式</td>
<td>Prototype Pattern</td>
</tr>
<tr>
<td>裝飾器模式</td>
<td>Decorator Pattern</td>
</tr>
<tr>
<td>代理模式</td>
<td>Proxy Pattern</td>
</tr>
<tr>
<td rowspan="4">行為型模式</td>
<td>策略模式</td>
<td>Strategy Pattern</td>
</tr>
<tr>
<td>模板模式</td>
<td>Template Pattern</td>
</tr>
<tr>
<td>委派模式</td>
<td>Delegate Pattern</td>
</tr>
<tr>
<td>觀察者模式</td>
<td>Observer Pattern</td>
</tr>
</tbody>
</table>
注意
需要特別聲明的是,設(shè)計模式從來都不是單個設(shè)計模式獨立使用的。在實際應(yīng)用中,通常是多個設(shè)計模式混合使用,你中有我,我中有你。