观察者模式在项目中的使用
2018-03-21 17:30
183 查看
最近用到的场景:
1.购物车
2.聊天消息
我在把东西放到购物车里的时候,UI有好多地方需要更新,而且我对购物车内的商品进行增删操作的场景又特别多,这个时候去在每一个地方都去进行一个修改肯定是不好的。
解决方法:
监听数据集的变化。但是怎么监听数据集的变化是一个巨大的难题。这个时候你就需要封装数据集,封装add、remove操作。那样的话就可以在对数据集的操作之后增加notify所有观察者的操作。
我的所有的观察者
private List<PriceObserver> priceObservers = new ArrayList<>();我进行一个notify
for (PriceObserver observer : priceObservers) observer.notifyChanged(String.valueOf(shoppingCartTotalPrice));这样就可以实现,所有的UI更新,统一管理了。只需要进行一个注册观察者和解注册观察者的操作就可以
public void registerPriceObserver(PriceObserver observer) { priceObservers.add(observer); }
public void unregisterPriceObserver(PriceObserver observer) { priceObservers.remove(observer); }这样一来,上面提到的:“而且我对购物车内的商品进行增删操作的场景又特别多”这个问题也自动得到了解决。因为我是调用的被封装后的增删方法,我就不需要关注UI更新的细节了。
我这里是更新了数据集,然后更新所有UI,如果你想精确点,可以再细化下,不难的。
重新理一下:封装了数据集,解决了“增删操作的场景又特别多”的这个问题,用了观察者,解决了“UI有好多地方需要更新”。其实我这样处理的比较粗糙,正常情况是一个增删操作会对应几处UI的更新的,多处增删操作可能只会更新一处UI,这里需要你自己去细化一下了。
1.购物车
2.聊天消息
我在把东西放到购物车里的时候,UI有好多地方需要更新,而且我对购物车内的商品进行增删操作的场景又特别多,这个时候去在每一个地方都去进行一个修改肯定是不好的。
解决方法:
监听数据集的变化。但是怎么监听数据集的变化是一个巨大的难题。这个时候你就需要封装数据集,封装add、remove操作。那样的话就可以在对数据集的操作之后增加notify所有观察者的操作。
我的所有的观察者
private List<PriceObserver> priceObservers = new ArrayList<>();我进行一个notify
for (PriceObserver observer : priceObservers) observer.notifyChanged(String.valueOf(shoppingCartTotalPrice));这样就可以实现,所有的UI更新,统一管理了。只需要进行一个注册观察者和解注册观察者的操作就可以
public void registerPriceObserver(PriceObserver observer) { priceObservers.add(observer); }
public void unregisterPriceObserver(PriceObserver observer) { priceObservers.remove(observer); }这样一来,上面提到的:“而且我对购物车内的商品进行增删操作的场景又特别多”这个问题也自动得到了解决。因为我是调用的被封装后的增删方法,我就不需要关注UI更新的细节了。
我这里是更新了数据集,然后更新所有UI,如果你想精确点,可以再细化下,不难的。
重新理一下:封装了数据集,解决了“增删操作的场景又特别多”的这个问题,用了观察者,解决了“UI有好多地方需要更新”。其实我这样处理的比较粗糙,正常情况是一个增删操作会对应几处UI的更新的,多处增删操作可能只会更新一处UI,这里需要你自己去细化一下了。
相关文章推荐
- [设计模式]_[中级]_[观察者模式在项目中实际使用例子]
- [设计模式]_[中级]_[观察者模式在项目中实际使用例子]
- 在项目中使用设计模式思想——Abstract Factory、Factory Method、Singleton和Strategy模式的使用(上)
- 观察者模式使用WebForm实现的例子
- 观察者模式使用心得
- 我项目中使用的Facade模式
- 如何使用委托与事件来实现观察者模式
- WCF中使用观察者模式实现事件通知
- 翻译:观察者模式—使用JavaScript实现(转)
- 使用观察者模式在 Silverlight 中切换用户控件
- 如果你在VS2010下使用.net 4.0开发具有混合模式程序集的项目
- 结合项目实例 回顾传统设计模式(二)观察者模式
- 结合项目实例 回顾传统设计模式(二)观察者模式
- 使用javascript模拟观察者模式和事件监听广播机制
- C#中使用委托和事件实现观察者模式(observer pattern)
- 翻译:观察者模式—使用JavaScript实现
- IOC,观察者模式,项目的实际应用
- 在项目中使用设计模式思想——Abstract Factory、Factory Method、Singleton和Strategy模式的使用(上)
- 《GOF设计模式》—中介者 (MEDIATOR)—Delphi源码示例:Colleague—Mediator通信(使用观察者模式)
- Web项目中使用NLog记录日志,利用单件模式控制整个项目只有一个Logger对象的问题