如果观察者数量有许多,有人需要接受下雨通知,有人需要下雪,有人需要晴天,该如何来设计,肯定不能在目标借口写逻辑了

来源:5-1 课程总结

慕粉1506175688

2018-01-10 11:16

如果观察者数量有许多,有人需要接受下雨通知,有人需要下雪,有人需要晴天,该如何来设计,肯定不能在目标借口写逻辑了,

写回答 关注

6回答

  • 慕用4550773
    2024-09-29 21:09:39

    观察者:

    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的广播仍然存在,但在用户端过滤了。

  • 潇潇小饭
    2019-06-04 09:31:25

    实际订阅者 肯定是在数据库里面的    根据订阅者订阅的天气分类等 查出  订阅者进行发布

  • Samrong
    2019-01-05 23:50:11

    定义三个observer列表~

  • pardon110
    2018-09-08 14:47:12

    其实就下雨下雪晴天等等这些信息,是来源于数据,即来自己被观察者的依赖。通常是交给第三方类处理。

  • qq__SuperAlpaca_0
    2018-03-09 10:30:39

    设计一种数据结构,方便用户订阅和系统反馈

  • 小and
    2018-01-11 19:38:57
    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);
        }
    }


观察者模式

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

55289 学习 · 36 问题

查看课程

相似问题