/** * 观察者模式:就是一个发布订阅模型,有多个观察者和一个被观察者,被观察者状态改变,通知观察者 * 特点:一个被观察者,多个观察者,被观察者有个集合存储注册的观察者,被观察者提供注册,注销,通知功能 *此处以银行发工资为例子 * */ //被观察者,银行 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); } }