设计模式之观察者模式

Observer pattern
又称为发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。

定义

定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新。

The observer pattern is a software design pattern in which an object, called the subject, maintains a list of its dependents, called observers, and notifies them automatically of any state changes, usually by calling one of their methods.

observer uml

使用场景

  • 关联行为场景,需要注意的是,关联行为是可拆分的,而不是“组合”关系;
  • 事件多级触发场景;
  • 跨系统的消息交换场景,如消息队列,事件总线的处理机制。

ListView中的Adapter、EventBus、RxJava、回调函数等

比如android中的按钮点击事件,就是一对一的观察者模式,用户点击按钮,产生一个事件,发送给感兴趣的监听来处理。listener作为观察者,监听事件。

mvc也应用了观察者模式,model(被观察者\观察目标)中的数据变化会引起view(观察者)作出相应的改变。controller充当两者的中介者。

总结

观察者模式主要的作用就是对象解耦,将观察者与被观察者完全隔离,只依赖于 Observer 和 Observable 抽象。

优点

  • 观察者和被观察者之间是抽象耦合,应对业务变化;
  • 增强系统灵活性,可扩展性。

缺点

开发效率和运行效率的问题,开发调试会比较复杂,一个观察者卡顿,会影响整体的执行效率,在这种情况下,一般采用异步的方式。

参考

评论留言请点这里