定义
对象之间的一种一对多的依赖关系,当某个对象发生改变时,依赖这个对象的多个对象的状态也会随之改变。
使用场景
关联行为场景。需要注意的是:多个关联行为之间没有任何的关系。并不是一个组合的关系。
一种状态的改变会影响多个行为的变化。
类图
举例
当被观察者(剩余的钱)大于1000时,观察者(吃,穿行为)档次提高。
当被观察者(剩余的钱)大于1000时,观察者(吃,穿行为)档次降低。
/**
*剩余的钱 被观察的对象
*/
public class LeftMoney extends Observable{
public void leftMoneyHasChanged(int left){
//状态改变
setChanged();
//通知观察者
notifyObservers(Integer.valueOf(left));
}
}
/**
* 穿衣档次 观察者
*/
public class ActionDress implements Observer{
public void update(Observable o, Object arg) {
int leftMoney = Integer.parseInt(arg.toString());
//如果观察到剩余的钱比1000块钱大
if(leftMoney>=1000){
System.out.println("穿阿迪耐克!");
}else{
System.out.println("穿鸿星尔克!");
}
}
}
/**
*吃饭档次 观察者
*/
public class ActionEat implements Observer {
public void update(Observable o, Object arg) {
int leftMoney = Integer.parseInt(arg.toString());
//如果观察到剩余的钱比1000块钱大
if(leftMoney>=1000){
System.out.println("喝酒吃肉!");
}else{
System.out.println("吃方便面!");
}
}
}
public class Client {
public static void main(String[] args) {
//创建被观察者
LeftMoney leftMoney = new LeftMoney();
//创建观察者
ActionEat actionEat = new ActionEat();
ActionDress actionDress = new ActionDress();
//添加到观察队列
leftMoney.addObserver(actionDress);
leftMoney.addObserver(actionEat);
leftMoney.leftMoneyHasChanged(500);
}
}