这边的参数只是形式参数,名称不重要,两边只要数据类型一致就行。不过根据驼峰命名规则,Content肯定是不规范的,老师敲错了而已。
网络原因
什么意思
接口和抽象类都是所谓的代码复用时使用。
在使用时,要优先注意继承和接口概念,所有子类是一类事物(有兄弟关系)时,才应该是继承关系,不是一类事物就不要继承改用接口比较好;
当不符合继承条件时,使用接口,接口可以理解为标准,只定义大致方向,不论具体实现的时候使用;
当符合继承条件时,且你至少有一个方法是具体实现的时候,即已知时,可以考虑使用抽象类;
我个人理解是,接口更像是人为定义一系列的行为,是一种赋予的感觉;父类(抽象类)是人为抽取共性,是一种提炼的感觉。
至于优先级,都是看具体情况的,不过接口总体来说是比继承要灵活,毕竟是多实现、单继承。
当然还有接口和继承都用的情况,这能实现更多变的情况。
多写项目,遇到代码重复的时候,就多想想,慢慢就懂得接口和继承的好处和运用了。
观察者:
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的广播仍然存在,但在用户端过滤了。
666666666
集合也分有序的集合和无序的集合,看你具体使用哪一种集合来存放观察者了
我觉得 接口下面放一默认实现类最好
因为借口定义中会将Observable实现类的引用和推得具体消息都传过去,所以可以推可以拉,但是如果用notifyObservers()的话,没有具体消息了,就只能拿引用去拉了。
用事实证明直男癌的可怕。
引用不会更新,引用只是指向一个存在目标对象的地址而已,而不会关心其内部结构的变化。
观察者模式的定义
定义对象间的一种一对多的依赖关系。当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。
你或许可以换一个浏览器,有可能是浏览器版本的问题
ConcreteObserver没有实现java.util.Observer吧
好像是这么回事
可以通过权限来控制这个问题,这里仅仅是用来举例观察者模式的示例,比如可以将set方法设置为受保护的。
不管你有没有传参数,,对象都会被传过去,下面使他的遍历通知代码:
for (int i = arrLocal.length-1; i>=0; i--)
((Observer)arrLocal[i]).update(this, arg);
可见,当你没有传参数时,它的arg = null
所以,怎么用,看你了!
Ctrl+Alt+A
任何容器都可以, 映射还可以跟精准的调用被观察者的方法
java AWT界面库使用了观察者模式。
个人理解,是 这几个观察者之间没有紧密的依赖关系!是平行的关系,或者是比较独立的
有道词典,直接下载,他自动的
不是双向依赖吧,observer对象和observer对象已经做到了抽象松耦合,类与类之间没有依赖,这实体之间的依赖
我觉得,观察者在创建完成之后,就可以注册了