- 1.定义抽象目标类(被观察对象)
public abstract class Subject {
protected List<Observer> observers = new ArrayList<>();
public void add(Observer observer){
observers.add(observer);
}
public void remove(Observer observer){
observers.remove(observer);
}
public abstract void notifyObservers();
}
- 2.定义具体目标类(被观察对象){包括有:List集合存放对象 , add remove 对象 , 添加和移除观察者通知的method-遍历观察者的反应方法}
public class ConcreteSubject extends Subject {
@Override
public void notifyObservers() {
System.out.println("目标对象发改变");
System.out.println("=============");
for(Observer observer : observers){
observer.response();
}
}
}
- 3.观察者抽象类
public interface Observer {
void response();
}
- 4.观察者具体类:包括反应方法
public class ConcreteObserver1 implements Observer {
@Override
public void response() {
System.out.println("具体观察者1做出反应!");
}
}
public class ConcreteObserver2 implements Observer {
@Override
public void response() {
System.out.println("具体观察者2做出反应!");
}
}
测试:
public class Client {`在这里插入代码片`
public static void main(String[] args) {
Subject subject = new ConcreteSubject();
Observer obs1 = new ConcreteObserver1();
Observer obs2 = new ConcreteObserver2();
subject.add(obs1);
subject.add(obs2);
subject.notifyObservers();
}
}
sout
目标对象发改变
=============
具体观察者1做出反应!
具体观察者2做出反应!