首页 > 编程语言 >利用Java提供的观察者

利用Java提供的观察者

时间:2022-12-12 16:34:14浏览次数:47  
标签:Java String 观察者 content 利用 observerName public ConcreteObserver


/**
* 观察者类的具体实现
*/
public class ConcreteObserver implements Observer{
//名称的变量
private String observerName;

public String getObserverName() {
return observerName;
}

public void setObserverName(String observerName) {
this.observerName = observerName;
}

//o是拉的方式,arg是推的方式传递的信息
@Override
public void update(Observable o, Object arg) {
//第一种是推的方式
System.out.println(observerName+"收到了消息,目标推送过来的是"+arg);
//第二种是拉的方式
System.out.println(observerName+"收到了消息,主动到目标对象中去拉,拉的内容是"+
((ConcreteWeatherSubject)o).getContent());
}
}
/**
* 天气目标的具体实现类
*/
public class ConcreteWeatherSubject extends Observable{
//天气情况的内容
private String content;

public String getContent() {
return content;
}

public void setContent(String content) {
this.content = content;
//天气情况有了,就要通知所有的观察者
//注意在通知之前,在用java中的Observer模式时候,下面这句话不可少
this.setChanged();
//然后主动通知,这里我们先用推的方式
this.notifyObservers(content);
//如果是拉的方式,我们就调用
//this.notifyObservers();
}
}
public class Client {
public static void main(String[] args){
//创建天气作为一个目标,也可以说是被观察者
ConcreteWeatherSubject subject=new ConcreteWeatherSubject();
//创建一个女朋友作为观察者
ConcreteObserver girl=new ConcreteObserver();
girl.setObserverName("女朋友");
//创建老妈作为观察者
ConcreteObserver mum=new ConcreteObserver();
mum.setObserverName("老妈");
//注册观察者
subject.addObserver(girl);
subject.addObserver(mum);
//目标更新天气情况
subject.setContent("天气晴,气温28度");
}
}

标签:Java,String,观察者,content,利用,observerName,public,ConcreteObserver
From: https://blog.51cto.com/u_12026373/5930807

相关文章

  • 观察者模式
    观察者模式的定义定义对象间的一种一对多的依赖关系。当一个对象的状态发生改变时,所有依赖它的对象都得到通知并被自动更新。推模型目标对象主动向观察者推送目标的详细信息......
  • 【FAQ】HarmonyOS JavaUI中使用terminate()后重新打开AbilitySlice页面存在缓存
    【前言】同一个Ability下的两个不同的AbilitySlice,官方给的JavaUI中是通过present跳转AbilitySlice,使用AbilitySlice.terminate方法关闭Slice,具体可以参考官方给的示例代码......
  • rxjs究竟是观察者模式还是发布订阅模式
    rxjs源代码Subscriber.ts,里面对Subscriber的定义:exportclassSubscriberextendsSubscriptionimplementsObserverrxjs里面观察者模式还是发布订阅模式?观察者模式和发......
  • CVE-2019-0708漏洞检测利用
    漏洞详情Windows系列服务器于2019年5月15号,被爆出高危漏洞,该漏洞影响范围较广,漏洞利用方式是通过远程桌面端口3389,RDP协议进行攻击的。这个漏洞是今年来说危害严重性最大......
  • Java中try{}catch的隐藏(如何优雅的实现异常块)
    写在前面很早写的一篇文章,这里分享给小伙伴。在项目中,我们会遇到​​异常处理​​​,对于​​运行时异常​​​,需要我们自己​​判断处理​​​。对于​​受检异常​​​,需要......
  • java中OOM错误浅析(没有深入太多,一些粗浅的知识,可以温习用)
    嗯,生活加油鸭。。。。实习中遇到OOM错误GCoverheadlimitexceeded  问题,所以整理一下OOM异常问题:不对的地方请小伙伴留言^_^“阿里的开发手册”对OOM的描述:OOM,全称“......
  • 《深入理解Java虚拟机》读书笔记
    第一部分,走进Java第二部分,自动内存管理机制:第二章:Java内存区域与内存溢出异常一,Java中,虚拟机自动管理内存机制,不在需要为每一个new操作去写配对的delete和free操作,不容易......
  • 《java8高级应用与开发》读书笔记(二)
    写在前面本笔记涉及内容:类加载、反射、枚举、注解、国际化、格式化类加载:是指将类的class文件读入内存,并为之创建一个Java.lang.class对象。即当线程使用任何一个类时,系统都......
  • Ubuntu20.04 Java相关环境(JDK、Mysql、Redis、nacos、influxdb)部署以及运行
     重装了系统,系统版本号为:Ubuntu20.041、云平台登录云平台,选择要重装的服务器,关机、一键重装即可 2、安装jdk下载jdk-8u341-linux-x64.tar.gz,并复制到服务器目录下,比......
  • 使用javassist修改jar包里class文件
    参考:使用javassist修改jar包里class文件_淹死的鱼0719的博客-CSDN博客一、javassist依赖<dependency><groupId>org.javassist</groupId><artifactId>javassist......