设计模式——观察者模式

    xiaoxiao2021-03-26  38

    观察者(Observer)模式:定义对象间的一种一对多的依赖关系,当一个对象状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 Subject:被观察者,被观察者知道它的观察者,可以有任意多个观察者观察同一个目标,提供注册和删除观察者对象的接口; Observer:观察者,为那些在目标发生改变时需获得通知的对象定义一个更新接口; ConcreteSubject:具体目标,将有关状态存入各个ConcreteObserver对象,当它的状态发生改变时,向它的各个观察者发出通知; ConcreteObserver:具体观察者,保存一个指向ConcreteSubject对象的引用,存储有关状态,与Subject状态一致,实现Observer的更新接口,使自身状态与Subject状态一致; 优点: (1)目标与观察者间抽象耦合; (2)支持广播通讯; (3)建立一套触发机制,可以通过观察者模式实现一条触发链 缺点: (1)由于观察者不知道其他观察者的存在,可能会引起意外的更新; (2)多级触发效率低下 实现: (1)当观察者过多时,可以使用一个hash表来维护目标与观察者的远射; (2)一个观察者可以观察多个目标; (3)当删除目标Subject时,应该通知它的观察者Observer对该目标的引用进行重置,避免出现野指针; (4)当Subject发出通知前,要先更新自己的状态,确保自身状态与新状态一致; (5)更新数据时,可以使用推模型,或拉模型,推模型是目标Subject把所有的更新数据传给观察者Observer,拉模型是 Subject只通知 Observer数据已更新,然后有 Observer主动请求需要的数据; (6)可以扩展目标的注册接口,让观察者注册时指定感兴趣的事件,只有当该事件发生时,才通知观察者; (7)对于不支持多重继承的语言,通常将Subject类和Observer类写到一个类中; (8)当目标与观察者间的依赖关系特别复杂时,需要一个维护这种关系的对象,变更管理器(ChangeManager)。
    转载请注明原文地址: https://ju.6miu.com/read-661091.html

    最新回复(0)