背景
在军训的时候,当教官发起命令立正的时候,所有的学员必须执行教官的命令。在这个场景中,教官是一个被所有学员观察的对象,一旦教官的指令发出,学员就必须做出相应的反应。
代码
package com.design.mode.observer;
import java.util.ArrayList;
import java.util.List;
public class ObserverMode {
public interface Observer {
public void reciveCommand();
}
public static class Observable {
protected List<Observer> observerList;
public List<Observer> getObserverList() {
return observerList;
}
public void setObserverList(List<Observer> observerList) {
this.observerList = observerList;
}
protected void sendCommand() {
for (Observer observer : observerList) {
observer.reciveCommand();
}
}
}
public static class Instrctor extends Observable {
private void command() {
System.out.println("立正");
this.sendCommand();
}
}
public static class StudentOne implements Observer{
@Override
public void reciveCommand() {
System.out.println("学生一收到命令,立正");
}
}
public static class StudentTwo implements Observer{
@Override
public void reciveCommand() {
System.out.println("学生二收到命令,立正");
}
}
public static class StudentThree implements Observer{
@Override
public void reciveCommand() {
System.out.println("学生三收到命令,立正");
}
}
public static void main(String[] args) {
Instrctor instrctor = new Instrctor();
StudentOne studentOne = new StudentOne();
StudentTwo studentTwo = new StudentTwo();
StudentThree studentThree = new StudentThree();
List<Observer> list = new ArrayList();
list.add(studentOne);
list.add(studentTwo);
list.add(studentThree);
instrctor.setObserverList(list);
instrctor.command();
}
}
优势
在该模式中,被观察者之中有一个观察者列表,当被观察者的某个行为发生变化,就会通知观察者,观察者就也会执行相应的改变,在jdk中有原生的observer和observerable类,方便实现该设计模式。