課程
/后端開發
/Java
/觀察者模式
如果觀察者數量有許多,有人需要接受下雨通知,有人需要下雪,有人需要晴天,該如何來設計,肯定不能在目標借口寫邏輯了,
2018-01-10
源自:觀察者模式 5-1
正在回答
觀察者:
com.lone.watcherlombok.lombok.java.util.function.BiConsumerWeatherObserver?Observer?{ ????String?BiConsumer<WeatherSubjectWeatherObserver>?(Subject?subject)?{ ????????(!(subject?WeatherSubject))?{ ????????????IllegalArgumentException()} ????????.accept((WeatherSubject)?subject)} }
測試:
com.lone.watchercom.lone.watcher.WeatherSubject.Statelombok.extern.slf4j.Main?{ ????(String[]?args)?{ ????????Observer?girlfriend?=?WeatherObserver((subjectobserver)?->?{ ????????????State?state?=?subject.getSubjectState()(State.==?state)?{ ????????????????.info(observer.getName()subject.getContent())} ????????})Observer?mother?=?WeatherObserver((subjectobserver)?->?{ ????????????State?state?=?subject.getSubjectState()(State.==?state?||?State.==?state)?{ ????????????????.info(observer.getName()subject.getContent())} ????????})WeatherSubject?subject?=?WeatherSubject()subject.attach(girlfriend) ????????????????.attach(mother)subject.setSubjectState(State.)subject.setContent()} }
可否這樣寫,用戶自定義自己的行為,Subject的廣播仍然存在,但在用戶端過濾了。
實際訂閱者 肯定是在數據庫里面的? ? 根據訂閱者訂閱的天氣分類等 查出? 訂閱者進行發布
定義三個observer列表~
其實就下雨下雪晴天等等這些信息,是來源于數據,即來自己被觀察者的依賴。通常是交給第三方類處理。
設計一種數據結構,方便用戶訂閱和系統反饋
public?class?WheatherSubject?{ ????private?List<WheatherObserver>?mObservers?=?new?ArrayList<>(); ????private?String?wheather; ????public?final?static?String?SNOW?=?"下雪"; ????public?final?static?String?RAIN?=?"下雨"; ????public?final?static?String?SUNNY?=?"晴"; ????public?String?getWheather()?{ ????????return?wheather; ????} ????public?void?setWheather(String?wheather)?{ ????????this.wheather?=?wheather; ????????notifyObservers(wheather); ????} ????public?void?attach(WheatherObserver?observer)?{ ????????mObservers.add(observer); ????} ????public?void?detach(WheatherObserver?observer)?{ ????????mObservers.remove(observer); ????} ????public?void?notifyObservers(String?wheather)?{ ????????for?(WheatherObserver?observer?:?mObservers)?{ ????????????if?(observer.getWheathers().size()?<?1?||?observer.getWheathers().contains(wheather))?{ ????????????????observer.update(wheather); ????????????} ????????} ????} }
public?class?WheatherObserver?{ ????private?ArrayList<String>?mWheathers; ????public?WheatherObserver(String...?wheathers)?{ ????????mWheathers?=?new?ArrayList<>(); ????????mWheathers.addAll(Arrays.asList(wheathers)); ????} ????public?ArrayList<String>?getWheathers()?{ ????????return?mWheathers; ????} ????public?void?setWheathers(ArrayList<String>?wheathers)?{ ????????if?(mWheathers?!=?null)?{ ????????????mWheathers.clear(); ????????????mWheathers.addAll(wheathers); ????????} ????} ????public?void?update(String?wheather){ ????????System.out.print(wheather); ????????Log.i("fy",wheather); ????} }
public?class?WheaterClint?{ ????public?static?void?main(String[]?args){ ????????WheatherSubject?subject?=?new?WheatherSubject(); ????????WheatherObserver?observerAll?=?new?WheatherObserver(); ????????WheatherObserver?observerSnow?=?new?WheatherObserver(WheatherSubject.SNOW); ????????WheatherObserver?observerSnowAndRain?=?new?WheatherObserver(WheatherSubject.SNOW,WheatherSubject.RAIN); ????????subject.attach(observerAll); ????????subject.attach(observerSnow); ????????subject.attach(observerSnowAndRain); ????????subject.setWheather(WheatherSubject.RAIN); ????} }
舉報
解決發布/訂閱問題的觀察者模式,以及何時使用觀察者模式
2 回答觀察者和具體觀察者
2 回答目標和觀察者之間的依賴關系是什么?
1 回答什么是觀察者模式
1 回答觀察者的注冊時機
3 回答新人報道~
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2024-09-29
觀察者:
測試:
可否這樣寫,用戶自定義自己的行為,Subject的廣播仍然存在,但在用戶端過濾了。
2019-06-04
實際訂閱者 肯定是在數據庫里面的? ? 根據訂閱者訂閱的天氣分類等 查出? 訂閱者進行發布
2019-01-05
定義三個observer列表~
2018-09-08
其實就下雨下雪晴天等等這些信息,是來源于數據,即來自己被觀察者的依賴。通常是交給第三方類處理。
2018-03-09
設計一種數據結構,方便用戶訂閱和系統反饋
2018-01-11