package com.thread.ch4;
import java.util.ArrayList;
import java.util.List;
/**
* 观察者模式
*/
public class Subject {
//被观察的对象
private List<Observer> observerList = new ArrayList<>();
private int state;
public int getState() {
return state;
}
public void setState(int state) {
if (state == this.state) {
return;
}
this.state = state;
notifyAllObserver();
}
public void attach(Observer observer) {
observerList.add(observer);
}
public void notifyAllObserver() {
observerList.stream().forEach(Observer::update);
}
}
package com.thread.ch4;
public abstract class Observer {
protected Subject subject;
public Observer(Subject subject){
this.subject = subject;
this.subject.attach(this);
}
public abstract void update();
}
package com.thread.ch4;
public class BinaryObserver extends Observer {
public BinaryObserver(Subject subject) {
super(subject);
}
@Override
public void update() {
System.out.println(getClass()+",state="+ Integer.toBinaryString( subject.getState()));
}
}
package com.thread.ch4;
public class OctalObserver extends Observer {
public OctalObserver(Subject subject) {
super(subject);
}
@Override
public void update() {
System.out.println(this.getClass()+",state="+Integer.toOctalString(subject.getState()));
}
}
package com.thread.ch4;
public class ObserverClient {
public static void main(String[] args) {
final Subject subject = new Subject();
new BinaryObserver(subject);
new OctalObserver(subject);
System.out.println("---------------------------");
subject.setState(10);
System.out.println("===========================");
subject.setState(15);
}
}
---------------------------
class com.thread.ch4.BinaryObserver,state=1010
class com.thread.ch4.OctalObserver,state=12
===========================
class com.thread.ch4.BinaryObserver,state=1111
class com.thread.ch4.OctalObserver,state=17
Process finished with exit code 0
来源:oschina
链接:https://my.oschina.net/lvzi98/blog/3165225