Head First 设计模式 —— 02. 观察者 (Observer) 模式

思考题

在咱们的一个实现中,下列哪一种说法正确?(多选) P42java

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. 咱们是针对具体实现编程,而非针对接口git

    • 每一个布告板都是直接进行更新
  • [x] B. 对于每一个新的布告板,咱们都得修改代码github

    • 每一个新的布告板,都需加一行更新代码
  • [x] C. 咱们没法在运行时动态地增长(或删除)布告板编程

    • 没有针对接口编程,运行时没法更改布告板
  • [x] D. 布告板没有实现一个共同的接口设计模式

    • 没有布告板的相关介绍,认为没有实现同一个接口
    • 后来又学到 TypeScriptGolang 等语言,这些语言是存在鸭子类型,不须要显示继承类或者接口(但本书全部例子都是 Java ,因此不认为是鸭子类型)
    • 【答案认为没有此选项】全部布告板都有相同的更新方式,看起来像实现了一个共同的接口
  • [x] E. 咱们还没有封装改变的部分ide

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

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

观察者模式

定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的全部依赖者都会受到通知并自动更新 P51spa

观察者模式

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

    • 松耦合把对象之间的互相依赖降到了最低,所以能够增长弹性,应对变化

所思所想

  • 以为观察者模式又像用到了策略,不一样的观察者和不一样的主题就相似于不一样的策略;可能各个不一样的设计模式都运用到 OO基础和OO原则,使得有点类似,可是解决的问题仍是有所差别的
  • 观察者模式也用得不少,之前用的各类事件监听器就是观察者模式,不过这种模式的观察者不须要主题的引用,注册由客户端实现
本文首发于公众号:满赋诸机( 点击查看原文) 开源在 GitHub : reading-notes/head-first-design-patterns
相关文章
相关标签/搜索