第四章妈妈和女友订阅不同的天气状态,我有更好的解答,核心代码在下面,就是重写notifyObserver()方法用三层for循环。我太聪明了!
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;跳出也没有用,毕竟有这么多层循环
}
}
}
}