/**
* 观察者类的具体实现
*/
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度");
}
}
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
行为型设计模式-观察者模式的优缺点
缺点:观察者之间有过多的细节依赖、提高时间消耗及程序的复杂度。如果在观察者和观察目标之间存在循环依赖,观察目标会触发它们之间进行循环调用,可能导致系统崩溃。优点观察者模式支持广播通信观察者和被观察者之间建立抽象的耦合
行为型模式 设计模式 C++类与对象 C++对象之间通信 C++STL容器 -
springboot提供的观察者模式 spring 观察者
写在最前实际业务开发过程中,业务逻辑可能非常复杂,核心业务 + N个子业务。如果都放到一块儿去做,代码可能会很长,耦合度不断攀升,维护起来也麻烦,甚至头疼。还有一些业务场景不需要在一次请求中同步完成,比如邮件发送、短信发送等。MQ 确实可以解决这个问题,但 MQ 重啊,非必要不提升架构复杂度。针对这些问题,我们了解一下 Spring Event。Spring Event 同步使用Spring Ev
springboot提供的观察者模式 spring boot spring event spring 事件 spring