标签:抽象类 引用 class sds update main arraylist server 状态改变
对象之间定义一对多的依赖,当一
这个对象状态发生变化,它所依赖的对象都能得到变化后的状态值。(简单的来说,就类似消息系统的发布订阅模式。其中消息系统中的消费者
就是观察者
,消息系统中的生产者
就是被观察者。当生产者的状态发生变化,那么订阅该消息的消费者就将全部接收到变化的信息)
由UML可以看出,该模式由四个对象组成:
public interface Subject {
void initMsg(String msg);
public void addObserver(Observer observer);
public void removeObserver(Observer observer);
public void notifyObserver();
}
public interface Observer {
public void updateMsg(String msg);
}
public class MsgSubject implements Subject {
private List<Observer> observerList = new ArrayList<>();
private String msg;
@Override
public void initMsg(String msg) {
this.msg = msg;
System.out.println("收到消息:" + this.msg);
// 通知观察者
this.notifyObserver();
}
@Override
public void addObserver(Observer observer) {
this.observerList.add(observer);
}
@Override
public void removeObserver(Observer observer) {
this.observerList.remove(observer);
}
@Override
public void notifyObserver() {
observerList.forEach(o -> {
o.updateMsg(this.msg);
});
}
public class MsgObserver implements Observer {
private String userName;
public MsgObserver(String userName) {
this.userName = userName;
}
@Override
public void updateMsg(String msg) {
System.out.println(userName + "收到消息: " + msg);
}
public int hashCode() {
return super.hashCode();
}
public boolean equals(Object obj) {
return super.equals(obj);
}
public String toString() {
return super.toString();
}
}
public static void main(String[] args) {
Observer observer = new MsgObserver("a");
Observer observer1 = new MsgObserver("b");
Observer observer2 = new MsgObserver("c");
Subject subject = new MsgSubject();
subject.addObserver(observer);
subject.addObserver(observer1);
subject.addObserver(observer2);
subject.initMsg("sds");
subject.removeObserver(observer1);
subject.initMsg("adsd");
}
收到消息:sds
a收到消息: sds
b收到消息: sds
c收到消息: sds
收到消息:adsd
a收到消息: adsd
c收到消息: adsd
标签:抽象类 引用 class sds update main arraylist server 状态改变
原文地址:https://www.cnblogs.com/KevinStark/p/11412338.html