public class TestObserver {
public static void main(String[] args) {
Subject subject=new Subject();
new BinaryObserver(subject);
new HexadecimalObserver(subject);
subject.setState(8);
subject.setState(10);
subject.setState(16);
}
}
public class Subject {
private List<Observer> observers=new ArrayList<>();
private int state;
public int getState(){
return state;
}
public void setState(int state){
this.state=state;
notifyAllobservers();
}
public void attach(Observer observer){
observers.add(observer);
}
public void notifyAllobservers(){
for(Observer observer:observers){
observer.update();
}
}
}
public abstract class Observer {
protected Subject subject;
public abstract void update();
}
public class HexadecimalObserver extends Observer{
public HexadecimalObserver(Subject subject) {
this.subject=subject;
this.subject.attach(this);
}
@Override
public void update() {
String result = Integer.toHexString(subject.getState());
System.out.println("订阅的数据发生变化,新的数据处理为十六进制值为:" + result);
}
}
public class BinaryObserver extends Observer {
public BinaryObserver(Subject subject) {
this.subject=subject;
this.subject.attach(this);
}
@Override
public void update() {
String result = Integer.toBinaryString(subject.getState());
System.out.println("订阅的数据发生变化,新的数据处理为二进制值为:" + result);
}
}