观察者模式是一种常用的软件设计模式,其定义了对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。观察者模式经常用于解耦合,当一个系统模块的改变将会影响到其它模块时,这种模式就显得特别重要。
一、观察者模式的结构
观察者模式中包含以下几个角色:
1. Subject(目标):它是被观察的对象,当它状态发生改变时,会通知所有的观察者。
2. Observer(观察者):它定义了一个抽象的更新接口,使得观察者可以接收到被观察对象的通知。
3. ConcreteSubject(具体目标):它是目标类的子类,通常包含有经常发生改变的数据。
4. ConcreteObserver(具体观察者):它是观察者的子类,实现了更新接口,以便对状态变化进行响应。
二、观察者模式的应用举例
1. 股票交易系统
在股票交易系统中,股票信息是经常发生变化的,投资者需要实时了解股票价格、涨跌幅等信息。股票价格的变化会自动地通知给所有持有该股票的投资者,这就是观察者模式的应用。其中,股票交易系统作为Subject,投资者作为Observer。
2. 游戏开发中的输入事件处理
在游戏的开发中,玩家的输入事件会直接影响游戏的运行,如方向键、鼠标点击等等。游戏引擎会作为Subject,负责监控这些事件的发生,并通知所有的观察者对象,即游戏的各个模块。
3. Android开发中的广播机制
Android开发中的广播机制就是观察者模式的应用。在广播机制中,广播发送者称为Broadcast Sender,广播接收者称为Broadcast Receiver。Broadcast Sender负责监控系统事件的发生,并向所有的Broadcast Receiver发出广播,而Broadcast Receiver就是Observer。
三、观察者模式的优缺点
优点:
1. 观察者和目标之间的耦合度较小,增加、删除观察者都很容易。
2. 实现了动态联动,当一个对象发生改变时,它的所有依赖对象会自动更新。
3. 程序结构清晰,易于扩展。
缺点:
1. 如果观察者过多,通知所有的观察者对象也会使程序变得比较耗费资源。
2. 如果观察者和目标之间的依赖关系不是很清晰,就会导致程序的设计比较困难。
扫码咨询 领取资料