1.理解
多个警察(观察者)观察一个罪犯(被观察者)
如果罪犯挟持人质
警察A拿出手枪直接击毙罪犯
警察B拿出手机打120救人质
如果罪犯要自首
警察A拿出手枪严正以待以防有诈
警察B走上前去卸掉罪犯的武器
2.普通观察者模式
自己实现
观察者
package com.cn.mytest.observer.mine;
/**
* 观察者
*/
public interface Observer {
/**
* 观察到某事,做出响应
* @param args
*/
public void doSomething(String args);
}
package com.cn.mytest.observer.mine;
public class PoliceA implements Observer{
@Override
public void doSomething(String args) {
System.out.println("Im policeA");
switch (args) {
case "beAbductor" :
System.out.println("kill the criminal with my handgun!!!");
break;
case "surrender" :
System.out.println("be careful!!!");
break;
}
}
}
package com.cn.mytest.observer.mine;
public class PoliceB implements Observer{
@Override
public void doSomething(String args) {
System.out.println("Im policeB");
switch (args) {
case "beAbductor" :
System.out.println("call the doctor with my cellphone!!!");
break;
case "surrender" :
System.out.println("take off the weapon of the criminal!!!");
break;
}
}
}
被观察者
package com.cn.mytest.observer.mine;
/**
* 被观察者
*/
public interface Observable {
public void addObserver(Observer observer);
public void deleteObserver(Observer observer);
/**
* 通知观察者
* @param args
*/
public void notifyObserver(String args);
}
package com.cn.mytest.observer.mine;
import java.util.ArrayList;
import java.util.List;
/**
* 罪犯
*/
public class Criminal implements Observable{
@Override
public void addObserver(Observer observer) {
polices.add(observer);
}
@Override
public void deleteObserver(Observer observer) {
polices.remove(observer);
}
@Override
public void notifyObserver(String args) {
polices.forEach(p -> p.doSomething(args));//通知所有观察