设计原则

  • 为交互对象之间的松耦合设计而努力。
  • 对扩展开放,对修改关闭。

松耦合

松耦合设计可以让系统更具有弹性。如果把两个类、模块或系统之间的相互依赖降到最低,那么一方变化,另一方无法感知,则可以让系统维护性变得很高。
当然我们正常开发中无法避免依赖,但是可以接受功能模块内部有很强的依赖性,无关的模块之间尽可能地不相互依赖。所以我们能接受的依赖顺序是 无依赖 -> 单向依赖 -> 双向依赖 -> 相互依赖 如果出现的 双向依赖 和 相互依赖 这就出现了坏代码的味道,那我们就要考虑代码如何进行修改了。

开放扩展

我们设计类时要尽可能地让类容易扩展,在不修改现有代码的情况下,对对象增加新的功能与行为。这样设计可以让我们的代码更加富有弹性。
当然这个原则也不是要彻底遵守,正如我们第一章所说的,封装变化,我们要将未来可能会变动的代码进行封装或者采取开闭原则,如果所有代码都要采用开闭原则代码将变得复杂且不可维护。

设计模式

  • 观察者模式 - 提供了一种对象设计,让主题和观察者之间解耦。
  • 装饰者模式 - 动态地将责任附加到对象上。想要扩展功能,装饰者提供有别于继承的另一种选择。

观察者模式

image.png

  • 这样就做到了,观察者不用频繁刷新数据,只需要等待被观察者主动告知数据变化。
  • 这样观察者和被观察者两个交互对象之间就做到了解耦,各自只需要考虑自己的实现,不用管其他,如果有新加入的观察者,也不需要知道和考虑已有的观察者。
  • 当然是在 notifyObserver() 方法中广播新消息,还是收到 notifyObserver() 更新广播再主动调用 getState() 获取新消息,可以根据业务灵活选择。

装饰者模式

image.png

  • 通过这个设计模式我们就可以使用扩展来增加功能,而不用每次都修改现有代码。
  • 你可以通过无数个装饰来增加功能。
  • 但是如果过度使用会有无数个小类,让代码的可读性变得很差。