关于设计模式:Head-First-设计模式-02-观察者-Observer-模式

6次阅读

共计 1052 个字符,预计需要花费 3 分钟才能阅读完成。

思考题

在咱们的一个实现中,下列哪种说法正确?(多选)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. 布告板没有实现一个独特的接口

    • 没有布告板的相干介绍,认为没有实现同一个接口
    • 起初又学到 TypeScriptGolang 等语言,这些语言是存在鸭子类型,不须要显示继承类或者接口(但本书所有例子都是 Java,所以不认为是鸭子类型)
    • 【答案认为没有此选项】所有布告板都有雷同的更新形式,看起来像实现了一个独特的接口
  • [x] E. 咱们尚未封装扭转的局部

    • 布告板会动静更新,此处仍是针对实现编程
  • [x] F. 咱们进犯了 WeatherData 类的封装

    • 批改了不属于咱们负责的类
    • 【答案认为没有此选项】办法没有入参,暗示必须在办法内批改

观察者模式

定义了对象之间的一对多依赖,这样一来,当一个对象扭转状态时,它的所有依赖者都会受到告诉并自动更新 P51

  • 设计准则 :为了交互对象之间的松耦合设计而致力 P53

    • 松耦合把对象之间的相互依赖降到了最低,因而能够减少弹性,应答变动

所思所想

  • 感觉观察者模式又像用到了策略,不同的观察者和不同的主题就相似于不同的策略;可能各个不同的设计模式都使用到 OO 根底和 OO 准则,使得有点类似,然而解决的问题还是有所差别的
  • 观察者模式也用得很多,以前用的各种事件监听器就是观察者模式,不过这种模式的观察者不须要主题的援用,注册由客户端实现

本文首发于公众号:满赋诸机(点击查看原文)开源在 GitHub:reading-notes/head-first-design-patterns

正文完
 0