/**
* 观察者模式:就是一个发布订阅模型,有多个观察者和一个被观察者,被观察者状态改变,通知观察者
* 特点:一个被观察者,多个观察者,被观察者有个集合存储注册的观察者,被观察者提供注册,注销,通知功能
*此处以银行发工资为例子
*
*/
//被观察者,银行
public class Bank {
private Integer state;
private List<Obsever> list;
public Bank() {
list=new ArrayList<>();
}
public void register(Obsever o){
list.add(o);
}
public void removeObser(Obsever o){
list.remove(o);
}
public void notifyAllObser(String message){
for (Obsever obsever : list) {
obsever.getMessage(message);
}
}
//状态变更,通知用户
public void changeStatus(Integer state){
this.state=state;
notifyAllObser("工资已经发放了");
}
}
//观察者
public class Obsever {
private String name;
public Obsever(String name) {
this.name = name;
}
public void getMessage(String message){
System.out.println("尊敬的"+name+":"+message);
}
}
public class Test {
public static void main(String[] args) {
Bank bank = new Bank();//被观察者
//注册观察者
bank.register(new Obsever("小明"));
bank.register(new Obsever("小花"));
bank.register(new Obsever("小光"));
//通知观察者
bank.changeStatus(2);
}
}