1. 程式人生 > >觀察者模式在專案中的使用

觀察者模式在專案中的使用

最近用到的場景:

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,這裡需要你自己去細化一下了。