## 行為型
設計模式被分成三大類,創建型,結構型,行為型。具體要闡述為什么這么分,這個問題,暫時解決不了,但是我們能做的是,合理的運用它。對于行為型設計模式,區別于其他兩種的就是:它側重的是對“方法”的操作。
下面是對幾個行為型的設計模式的理解。
## 一、模板方法
1、概述
將一個操作的算法的骨架和具體算法實現分離——解耦 骨架在父類中,算法延遲到子類實現,就可以有N多實現——多態的體現
回顧一下類圖,看看模板解決的問題:

**模板的眼**:**;解決代碼重復,會算法有既定順序。**
-
使用**繼承**,解決代碼重復的問題,重復的代碼抽象成一個基類,做成模板;杜絕子類出現不變的代碼,模板就是為了給子類瘦身。
-
**基類中有代碼實現**:這里抽象出來不單單是某幾個方法聲明,方法中是可以有代碼實現的。只要是會發生重復的就放到父類中。
-
**算法順序**:父類中(模板)必須有一個既定的方法來執行算法順序——算法的骨架,是既定的
-
子類只是不同算法的實現父類,不改變算法結構
**2、改造模板----算法骨架靈活**
**算法的骨架是既定的,可以修改嗎?要不要修改?**
這里的算法骨架順序跟建造模式類似,順序基本是穩定。怎么說呢?
一般使用這兩種模式的“事物”,它的構成順序都是穩定的,不是經常需要變動的,這是一個前提,但是并不是說,這個順序一定不可以改變,為了靈活編程,可以通過委托來實現。往委托隊列注冊的過程就是排序的過程,委托是一大塊,不多說了。
**子類可以擴展父類嗎?**
當然是可以擴展的,因為是繼承呀。但是個人認為沒有多大意義。如果只是為了添加方法到子類中,跟復寫方法無關聯,那就是有點破壞單一原則的味道了。
**3、建造模式VS模板模式**
相同:都有既定的順序,僅此而已。
不同:兩個設計模式的適用范圍不同,解決問題不同,一個是創建型,一個是行為型,其他就不用啰嗦了吧。
## 二、觀察者
**1、觀察者的幾點認識**
-
一對多的依賴關系
-
多個對象觀察一個主題
-
主題發生變化,觀察的對象隨之變化
主題與觀察對象,觀察對象之間都是陌生的。一方負責變化,通知;一方負責接收,做出對應變化。
生活中的實例:訂閱網站。
通過類圖來分析觀察者的優缺點:

**優點**:解耦是觀察者的一大特色。通過依賴倒轉,面向接口編程的思想,給多個觀察者增加父類接口,讓被通知者成為主動觀察者,來實現觀察者和主題的銜接。
**不足**:主題只能和一種類型的觀察者進行關聯——從途中可以看出所有的觀察者都是繼承自一個父類:observer,所以這些觀察者都是一個父類,要想增加多個類型的觀察者,便有心無力了。
**2、觀察模式進階委托**
那要是我想通知多個類型的觀察者怎么辦?答案還是——**委托**?
1.
想要通知其他類型的觀察者,需要如下改動:最大的局限就是這個抽象的接口——observer,那么就把它去掉。
1.
抽象類不存在,那么主題中通知的方法(notify)就沒有意義了,也去掉。
1.
將動態通知觀察者的權利從主題移交給調用者。——主題和觀察者徹底解耦。
1.
聲明委托,在調用短端注冊各種類型的觀察者,執行調用。
## 三、策略模式:封裝算法,算法變化不影響用戶使用。
(具體的在上篇博客中已經寫到了)
**總結:**行為型的設計模式還有:職責鏈,命令,解釋,迭代,中介者,備忘錄,狀態,訪問者模式。這里只寫了三個,其他的幾個沒有這幾個上手。對于剩下的幾個模式:我們本著一個這樣的原則:what?when?how?
- 前言
- 抽象工廠——創建型設計模式一
- 工廠三姐妹——創建型設計模式之二
- 初識面向對象設計模式
- 建造者模式——創建型模式之三
- 原型模式——創建型設計模式四
- 適配器 and 組合模式——結構性模式之一
- 橋接模式——結構性設計模式之二
- 組合模式——結構型設計模式之三
- 裝飾模式——結構型設計模式之四
- 外觀模式——結構型設計模式之五
- 代理模式——結構型設計模式之六
- 觀察者模式——行為型設計模式之五
- 模板設計——行為設計模式之一
- 命令模式——行為設計模式之二
- 狀態模式——行為型設計模式之三
- 職責模式——行為設計模式之四
- 中介模式——行為模式之六
- 策略+簡單工廠 實戰篇
- 看觀察者怎么全方位觀察機房收費系統
- 登陸也需要裝飾——機房收費系統裝飾模式實戰
- 何為抽象?你有本末倒置嗎?
- 再回首,策略、簡單工廠是否依然?
- 再回首——行為型設計模式