MessageSubject接口(被觀察者接口)
package observer;
public interface MessageSubject {
public void addObserver(Observer observer);
public void removeObserver(Observer observer);
public void notifyObservers();
}
Observer接口(觀察者接口)
package observer;
public interface Observer {
public void update(String str);
}
Message類(被觀察者實現類)
package observer;
import java.util.ArrayList;
import java.util.List;
public class Message implements MessageSubject {
private String msg;
private List<Observer> list=new ArrayList<>();
public void sendMsg(String str){
msg=str;
notifyObservers();
}
@Override
public void addObserver(Observer observer) {
list.add(observer);
}
@Override
public void removeObserver(Observer observer) {
list.remove(observer);
}
@Override
public void notifyObservers() {
for(Observer observer:list){
observer.update(msg);
}
}
}
User類(觀察者實現類)
package observer;
public class User implements Observer {
private String name;
public User(String name) {
this.name = name;
}
@Override
public void update(String str) {
System.out.println("["+name+"]"+"收到消息:"+str);
}
}
測試
package observer;
public class ObserverTest {
public static void main(String[] args) {
User user1=new User("tom");
User user2 = new User("lily");
Message message = new Message();
message.addObserver(user1);
message.addObserver(user2);
message.sendMsg("hello......");
}
}
結果
"C:\Program Files\Java\jdk-9.0.4\bin\java.exe" "-javaagent:D:\Program Files\JetBrains\IntelliJ IDEA 2018.3.4\lib\idea_rt.jar=53587:D:\Program Files\JetBrains\IntelliJ IDEA 2018.3.4\bin" -Dfile.encoding=UTF-8 -classpath "D:\java\test\bin;D:\java\test\libs\guava-27.0-jre.jar;D:\Program Files\JetBrains\IntelliJ IDEA 2018.3.4\lib\junit.jar;D:\java\test\libs\apache-mina-2.0.20\dist\mina-core-2.0.20.jar;D:\java\test\libs\apache-mina-2.0.20\lib\slf4j-api-1.7.26.jar;D:\java\test\libs\jdom-2.0.6.jar;D:\java\test\libs\dom4j-2.0.2.jar;D:\java\test\libs\xstream-1.4.11.1.jar;D:\java\test\libs\xpp3-1.1.3.4.C.jar;D:\java\test\libs\gson-2.8.4.jar" observer.ObserverTest
[tom]收到消息:hello......
[lily]收到消息:hello......