Observer
Example - Propagate status change
class StatusSubject {
private int status;
private List<StatusObserver> observers = new ArrayList<>();
public void add(StatusObserver observer) {
observers.add(observer);
}
public void updateStatus(int status) {
this.status = status;
}
public void notifyObservers() {
observers.stream().forEach(it -> it.update());
}
}
abstract class StatusObserver {
private StatusSubject subject;
public StatusObserver(StatusSubject subject) {
this.subject = subject;
subject.add(this);
}
public StatusSubject getSubject() {
return subject;
}
public abstract void update();
}
class PublishMessageToQueue extends StatusObserver {
public PublishMessageToQueue(StatusSubject subject) {
super(subject);
}
@Override
public void update() {
System.out.println(getClass().getSimpleName() + " updating...");
}
}
class UpdataUIStatusBarObserver extends StatusObserver {
public UpdataUIStatusBarObserver(StatusSubject subject) {
super(subject);
}
@Override
public void update() {
System.out.println(getClass().getSimpleName() + " updating...");
}
}Last updated