第四章妈妈和女友订阅不同的天气状态,我有更好的解答,核心代码在下面,就是重写notifyObserver()方法用三层for循环。我太聪明了!

来源:4-3 观察者接口

圆明园q

2015-07-09 17:08

protected void notifyObserver() {

//第一层for循环遍历所有订阅人

    for(Observer observer:observers){

 //订阅人设置的要提醒的天气状态,字符串数组形式存储

        String[] observerWeathers= ((ConcreteObserver)observer).getObserverWeathers();

 //目标更新的天气状态也是数组,毕竟一天可以有多种天气,晴转多云,雨转晴。第二层for循环遍历这些状态

        for (String weatherContent : weatherContents) {

//第三层for循环遍历订阅人自定义的需要提醒的天气状态

            for(String observerWeather:observerWeathers){

//如果当天的天气状态中有订阅人所关注的一种天气,就会提醒订阅人

                if(weatherContent.equalsIgnoreCase(observerWeather)){

                    observer.update(weatherContents);

//这有个小bug,如果当天天气为晴和雨,而且订阅人也设定了晴和雨时要提醒,那么会给订阅人发送两次一

//模一样的消息.用break;跳出也没有用,毕竟有这么多层循环

                }

        }

    }

}


写回答 关注

3回答

  • qq_逆时针_1
    2018-06-21 18:52:59

    哇  你好聪明啊

  • leowei
    2016-10-29 20:07:56

     String[] observerWeathers= ((ConcreteObserver)observer).getObserverWeathers(); 这个能 生成数组?


  • 一片口香糖
    2016-01-06 17:30:48

    明显性能差一些啊,楼上。3层for循环,你别吓我好么

观察者模式

解决发布/订阅问题的观察者模式,以及何时使用观察者模式

55290 学习 · 36 问题

查看课程

相似问题