1. 定义
当一个对象(被观察对象)被修改时,则会自动通知它的依赖对象。
2. 类图
3. 实现
3.1 Subject
被观察者类
package observer;
import java.util.ArrayList;
import java.util.List;
public class Subject {
private int state;
public List<Observer> observerList = new ArrayList<Observer>();;
public int getState() {
return state;
}
public void setState(int state) {
this.state = state;
notifyAllObserver();
}
public void attach(Observer observer) {
observerList.add(observer);
}
private void notifyAllObserver() {
for(Observer observer: observerList)
observer.update();
}
}
成员变量:
state
:标志状态
List<Observer> observerList
: 观察者们,用于存放观察者们的集合
在setState(int state)
方法中状态改变,因此在该方法中调用私有方法通知所有观察者进行对应的操作
3.2 Observer
观察者类
package observer;
public abstract class Observer {
protected Subject subject;
public abstract void update();
}
抽象类,成员变量用于关联观察者和被观察者的关系
3.3 OctalObserver
类
package observer;
public class OctalObserver extends Observer {
public OctalObserver(Subject subject) {
this.subject = subject;
this.subject.attach(this);
}
@Override
public void update() {
System.out.println("OctalObserver: " + Integer.toOctalString(subject.getState()));
}
}
3.4 BinaryObserver
类
package observer;
public class BinaryObserver extends Observer {
public BinaryObserver(Subject subject) {
this.subject = subject;
this.subject.attach(this);
}
@Override
public void update() {
System.out.println("BinaryObserver: " + Integer.toBinaryString(subject.getState()));
}
}
3.5 HexaObserver
类
package observer;
public class HexaObserver extends Observer{
public HexaObserver(Subject subject) {
this.subject = subject;
this.subject.attach(this);
}
@Override
public void update() {
System.out.println("HexaObserver : " + Integer.toHexString(this.subject.getState()));
}
}
3.6 Main
类
package observer;
public class Main {
public static void main(String[] args) {
Subject subject = new Subject();
new OctalObserver(subject);
new BinaryObserver(subject);
new HexaObserver(subject);
System.out.println("subject的state值为15.。。");
subject.setState(15);
}
}