public interface Observer {
public void update(String state);
}
public class Subject {
//保存註冊的觀察者對象
private List<Observer> mObserver = new ArrayList<>();
//註冊觀察者對象
public void attach(Observer observer){
mObserver.add(observer);
System.out.println("註冊"+observer);
}
//註銷觀察者對象
public void detach(Observer observer){
mObserver.remove(observer);
System.out.println("註銷"+observer);
}
//通知所有註冊的觀察者對象
public void notifyEvenOne(String newStade){
for (Observer observer:mObserver){
observer.update(newStade);
}
}
}
public class ConcreteSubject extends Subject {
private String state;
public String getState() {
return state;
}
public void change(String newState){
this.state = newState;
System.out.println("通知狀態發生改變");
notifyEvenOne(state);
}
}
public class ObserverA implements Observer {
//觀察者狀態
private String observerState;
@Override
public void update(String newState) {
//更新觀察者狀態,讓它與目標狀態一致
observerState = newState;
System.out.println( "接收到消息:" + newState + ";我是A模塊,快來搶吧!!");
}
}
public class ObserverB implements Observer {
//觀察者狀態
private String observerState;
@Override
public void update(String newState) {
//更新觀察者狀態,讓它與目標狀態一致
observerState = newState;
System.out.println( "接收到消息:" + newState + ";我是B模塊,快來搶吧!!");
}
}
public class ObserverC implements Observer {
//觀察者狀態
private String observerState;
@Override
public void update(String newState) {
//更新觀察者狀態,讓它與目標狀態一致
observerState = newState;
System.out.println( "接收到消息:" + newState + ";我是C模塊,快來搶吧!!");
}
}
public static void main(String [] arg){
ConcreteSubject concreteSubject = new ConcreteSubject();
concreteSubject.attach(new ObserverA());
concreteSubject.attach(new ObserverB());
concreteSubject.attach(new ObserverC());
int s = 0;
while (true){
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
concreteSubject.change("ccc"+s);
s++;
}
}
6.輸出結果
通知狀態發生改變
接收到消息:ccc210;我是A模塊,快來搶吧!!
接收到消息:ccc210;我是B模塊,快來搶吧!!
接收到消息:ccc210;我是C模塊,快來搶吧!!
通知狀態發生改變
接收到消息:ccc211;我是A模塊,快來搶吧!!
接收到消息:ccc211;我是B模塊,快來搶吧!!
接收到消息:ccc211;我是C模塊,快來搶吧!!