Java 設計模式(五)設計模式的區別

  本系列文章共分爲五篇:
    設計模式的分類與原則
    創建型模式
    結構型模式
    行爲型模式
    設計模式的區別
  在之前的文章中,簡單總結了一下各種設計模式。此時,有必要從總體上去對比、總結一下,這樣能更好地理解與掌握。

一、設計模式的適用場景

  這個章節,對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 備忘錄模式與命令模式

  兩種模式都可以提供回到先前某點的功能,但前者是針對對象狀態,後者針對對象行爲。
  參考資料:那些相似的設計模式的區別

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章