策略模式:
策略模式是一個比較常用的模式,即使你沒有學習過設計模式,但是你以前的代碼中或多或少的用到過策略模式,只是你可能還不知道罷了。他是多用組合少用繼承、面向接口編程的一大體現,在類中有其他接口的組合,調用的是接口的方法,通過各個接口不同的實現來算法的替換。就像諸葛亮的錦囊妙計一樣,每個錦囊就是一個策略。
1. 定義
定義了算法族,分別封裝起來,讓他們之間可以相互替代,此模式讓算法的變換獨立於使用算法的客戶。
2. 優缺點
- 優點:算法之間可以任意的切換,維護和擴展都很好啊
- 缺點:策略類會很多,實現起來會繁瑣一些。(這個其實是大多數設計模式的通病)
3. 類圖
4. 用到的設計原則
- 面向接口編程
- 多用組合,少用繼承
- 封裝變化
2. 觀察者模式
觀察者模式是使用非常多的一個模式,在JDK中也有大量的應用,比如在swing的事件處理中就用到了觀察者模式。說白了觀察者模式就是一個一對多,像一羣人看電視一樣,電視就是一個subject(主體)或者說是被觀察者,而看電視的人就是observer(觀察者),電視的每一次變化都會被看電視的人看到。
1. 定義
定義了對象之間的一對多依賴,這樣一來,當一個對象改變狀態時,他的所有依賴者都會收到通知並自動更新。
2. 優缺點
- 優點:主題和觀察者之間依賴的是接口,是松耦合的關係,並且滿足開閉原則,可以擴觀察者的子類,並且主體類不用修改,只需要在主題類的客戶(調用主體類的類)中修改一些代碼即可。
- 缺點:如果主題有很多的直接觀察者或間接觀察者的話,通知這些觀察者需要花費很多的時間。如果主題之間有循環依賴的話,會觸發循環調用,這點在使用觀察者模式的時候要特別注意。
3. 類圖
4. 用到的設計原則
- 多用組合少用繼承
- 面向接口編程
- 開閉原則