观察者模式
观察者模式,名词整挺玄,本质上就是个对象数组。
往数组里添加对象引用被称为:订阅/注册。
遍历数组里的对象进行方法调用被称为:发布/通知。
可能让人迷惑的事情是,订阅和发布这两件事发生在不同的时机,而且发布的时候使用的需要是执行订阅的那个实例(不然白登记了)。
邮件发送的例子
邮件发送可以认为是一种观察者模式:
- 订阅者类实例:当前可编辑邮件
- 订阅:向当前邮件中添加联系人
- 发布:点击发送按钮(实际的行为是遍历联系人列表中的每个邮箱地址,把邮件内容发送给他们)
编辑的阶段 AddRecipient 只是往收件人数组里登记引用;点击发送的那一刻才开始遍历数组逐个投递。两个时机相隔很远,靠的就是那张一直被持有的联系人列表——发布时遍历的也必须是持有它的那个实例。