文章目錄
本系列文章共分爲五篇:
設計模式的分類與原則
創建型模式
結構型模式
行爲型模式
設計模式的區別
在之前的文章中,簡單總結了一下各種設計模式。此時,有必要從總體上去對比、總結一下,這樣能更好地理解與掌握。
一、設計模式的適用場景
這個章節,對23種設計模式的不同點做了一些簡單總結,以便更直觀地從全面把握,具體如下:
模式 | 適用場景 | 例子 |
---|---|---|
單例模式 | 只要求生成一個對象 需要頻繁實例化,而創建的對象又頻繁被銷燬 |
線程池 Android應用中的全局Context |
工廠方法模式 | 父工廠類中只有創建產品的抽象接口,將產品對象的實際創建工作推遲到具體子工廠類當中 | 老師佈置作業,要學生製作一個機甲玩具,小明做了奧特曼,小李做了變形金剛 |
抽象工廠模式 | 系統中有多個產品類,但每次只使用其中的某一類產品 | 依舊以老師佈置作業爲例,老師除了佈置機甲作業外,還可能佈置書法練習作業,小明寫了楷書,小李寫了行書 |
建造者模式 | 對象可以分模塊初始化 | Android中的AlertDialog |
原型模式 | 不同對象之間相似度搞 創建對象比較麻煩,但複製比較簡單 |
clone |
適配器模式 | 不同模塊之間接口不一致 | 插口轉換器 |
橋接模式 | 不同類都有多個變化的維度,這些維度可以組合成不同的結果 | 如顏色(有黑色、灰色)與書包(有雙肩包、挎包),可以組合成四種不同的包 |
組合模式 | 表示一個對象整體與部分的層次結構 | 文件夾與文件 |
裝飾器模式 | 不影響原有模塊功能,需要動態地添加、撤銷一些附屬功能 | 在原有模塊中加入日誌打印 |
外觀模式 | 隱藏子系統的複雜操作,對外提供簡單的接口 | 找代購者買商品,代購者會進行貨物挑選、議價、買入等流程 |
享元模式 | 系統中存在大量相同或相似的對象,只保存一個就行 | 圍棋中的黑白子 |
代理模式 | 控制訪問權限 | 不同管理層可以看到公司不同程度的財務賬目 |
模板模式 | 子類執行固定步驟下的不同具體步驟 | 優酷和愛奇藝都決定在6月推出懸疑劇集,愛奇藝推出了《十日遊戲》,優酷推出了《失蹤人口》 |
策略模式 | 不同算法互相替代使用 | 要進行排序時,可以使用快速排序,也可以使用插入排序 |
狀態模式 | 狀態在很大程度上決定了系統的運行 | 開關 |
觀察者模式 | 對象間存在一對多關係,一個對象的狀態發生改變會影響其他對象 | 羣發郵件 |
備忘錄模式 | 需要保存與恢復數據的場景 | Ctrl + Z |
中介者模式 | 不同對象之間關係複雜,需要調整 | 買房者、賣房者與中介 |
迭代器模式 | 爲遍歷某種結構提供統一接口 | 遍歷器Iterator |
解釋器模式 | 語言的文法較爲簡單,格式固定 | XML、JSON解析 |
命令模式 | 請求調用者與請求接收者解耦 | 物理老師給物理課代表下了一個命令:找出辦理物理成績最好的人 |
責任鏈模式 | 有多個對象可以處理一個請求 | 不同級別的人可以批准不同時長的假期 |
訪問者模式 | 對象結構中的對象需要提供多種不同且不相關的操作,而且要避免讓這些操作的變化影響對象的結構 | 瀏覽不同的電商網站購買衣服 |
二、設計模式的區別
2.1 狀態模式與策略模式
狀態模式處理對象所處的狀態,封裝了依賴於狀態的行爲;策略模式處理對象如何執行特定的任務,它封裝的是算法。
2.2 策略模式與模板方法模式
在模板方法中,算法是在編譯時通過繼承選擇的。使用策略模式,算法在運行時通過組合選擇。
2.3 代理模式與裝飾模式
代理模式控制對象訪問權限,裝飾模式用於向對象添加職責。
2.4 工廠模式與創建者模式
創建者模式可以將零件對象組裝成整體,而工廠模式直接給出完整的對象。
2.5 訪問者模式與迭代器模式
訪問者模式一般遍歷複雜結構,如樹結構或組合結構等,結構中每個結點可以同構也可以異構,前提是隻要提供一個預定的統一訪問接口即可。迭代器模式用於遍歷元素類型一致的集合(多是線性結構,當然也可以是非線性結構),不用爲每個元素定義統一的訪問接口。
2.6 適配器模式與外觀模式
適配器模式一般只包裝一個對象,目標是爲了改變接口來適應外部系統,但要完成的功能沒變。外觀模式 一般是將一個子系統進行包裝,目的是簡化接口。
2.7 裝飾器模式與適配器模式
裝飾器模式是爲了給現有對象增加功能,一般接口不變或接口增加。適配器模式是爲了改變其接口,功能保持不變。
2.8 工廠模式與原型模式
工廠模式是重新實例一個對象,原型模式是從已有的實例直接拷貝生成一個實例,從而省去了初始化的過程。
2.9 備忘錄模式與命令模式
兩種模式都可以提供回到先前某點的功能,但前者是針對對象狀態,後者針對對象行爲。
參考資料:那些相似的設計模式的區別