针对问题

有时一个对象状态的更改需要引发其他对象更新。最常见的情况便是在GUI编程中,对象中数据的改变需要反应到界面上。
例如一个table控件需要增加一行,传统方式是在table中创建一个新行,并为每个单元格赋值。但是这样做必然会将数据逻辑和界面逻辑耦合在一起,如果需要更新多个表格,那么这段代码就会重复出现多次。
Observer模式便是抽取了这种多个对象之间状态同步操作。

介绍

定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动刷新。

实现

Observer模式的静态图如下:

其中:
Subject维护一个Observer列表,Subject内部状态更新时通知列表中的Observer对象。
Observer声明Update接口,这个接口在Subject更新时被Subject调用,并保持Observer状态与Subject一致。

Observer模式的顺序图如下:

当Subject更新时它将通知各个Observer,Observer收到通知时可以查询Subject的状态,并同步自身状态。… Read the rest