源对象的动作触发观察者做一些相应的动作。
例子:
孩子(源对象)醒来会哭,孩子一哭,爸爸会喂奶,妈妈会抱,狗会叫。
观察者接口:
package org.garen.observer.v2;
/**
* 观察者接口
*/
public interface Observer {
void actionOnWakeup();
}
观察者类:
package org.garen.observer.v2;
public class Dad implements Observer {
private void feed() {
System.out.println("Dad feed ...");
}
@Override
public void actionOnWakeup() {
feed();
}
}
package org.garen.observer.v2;
public class Mum implements Observer {
private void hum() {
System.out.println("Mum hum ...");
}
@Override
public void actionOnWakeup() {
hum();
}
}
package org.garen.observer.v2;
public class Dog implements Observer {
private void yap() {
System.out.println("Dog yap ...");
}
@Override
public void actionOnWakeup() {
yap();
}
}
源对象:
package org.garen.observer.v2;
import java.util.ArrayList;
import java.util.List;
/**
* 源对象,被观察者
*/
public class Child {
// 观察者集合
private static List<Observer> observers = new ArrayList<>();
// 添加观察者
static {
observers.add(new Dad());
observers.add(new Dog());
observers.add(new Mum());
}
// 睡醒
public void wakeup() {
cry();
}
// 哭
private void cry() {
System.out.println("child cry wuwuwu....");
// 触发观察者做相应动作
for (Observer observer : observers) {
observer.actionOnWakeup();
}
}
}
测试类:
package org.garen.observer.v2;
public class Main {
public static void main(String[] args) {
// 孩子
Child child = new Child();
// 睡醒
child.wakeup();
}
}
运行结果:
child cry wuwuwu…
Dad feed …
Dog yap …
Mum hum …