觀察者模式在專案中的使用
阿新 • • 發佈:2019-01-10
最近用到的場景:
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,這裡需要你自己去細化一下了。