思考題
在我們的一個實作中,下列哪種說法正确?(多選)
P42
public class WeatherDate {
// 執行個體變量聲明
public void measurementsChanged() {
float temp = getTemperature();
float humidity = getHumidity();
float pressure = getPressure();
currentConditionsDisplay.update(temp, humidity, pressure);
statisticsDisplay.update(temp, humidity, pressure);
forecastDisplay.update(temp, humidity, pressure);
}
// 其他 WeatherData 方法
}
- [x] A. 我們是針對具體實作程式設計,而非針對接口
- 每個布告闆都是直接進行更新
- [x] B. 對于每個新的布告闆,我們都得修改代碼
- 每個新的布告闆,都需加一行更新代碼
- [x] C. 我們無法在運作時動态地增加(或删除)布告闆
- 沒有針對接口程式設計,運作時無法更改布告闆
- [x] D. 布告闆沒有實作一個共同的接口
- 沒有布告闆的相關介紹,認為沒有實作同一個接口
- 後來又學到
和TypeScript
等語言,這些語言是存在鴨子類型,不需要顯示繼承類或者接口(但本書所有例子都是Golang
,是以不認為是鴨子類型)Java
- 【答案認為沒有此選項】所有布告闆都有相同的更新方式,看起來像實作了一個共同的接口
- [x] E. 我們尚未封裝改變的部分
- 布告闆會動态更新,此處仍是針對實作程式設計
- [x] F. 我們侵犯了 WeatherData 類的封裝
- 修改了不屬于我們負責的類
- 【答案認為沒有此選項】方法沒有入參,暗示必須在方法内修改
觀察者模式
定義了對象之間的一對多依賴,這樣一來,當一個對象改變狀态時,它的所有依賴者都會受到通知并自動更新
P51
- 設計原則:為了互動對象之間的松耦合設計而努力
P53
- 松耦合把對象之間的互相依賴降到了最低,是以可以增加彈性,應對變化
所思所想
- 覺得觀察者模式又像用到了政策,不同的觀察者和不同的主題就類似于不同的政策;可能各個不同的設計模式都運用到 OO基礎和OO原則,使得有點相似,但是解決的問題還是有所差異的
- 觀察者模式也用得很多,以前用的各種事件監聽器就是觀察者模式,不過這種模式的觀察者不需要主題的引用,注冊由用戶端實作
本文首發于公衆号:滿賦諸機( 點選檢視原文 ) 開源在 GitHub : reading-notes/head-first-design-patterns