观察者,最简单的来说就是,当被观察者做出了某种举动,观察者能够第一时间知道被观察者做出的举动。
举个栗子:现在附近开了一家超市,但是呢!平常的时候都是有点小贵的,只有偶尔的时候才会有很便宜的东西,当然超市也知道,so,超市想着我想让这附近的人都能够第一时间知道我们超市某件商品降价了。此刻,超市就成了被观察者,而周围的人都成了观察者。
超市具体要怎么做我就不知道了!
下面开始讲的就是Java!
图可能画的有点问题,虚线没找到,等下次在改啊!汗!
图上画的是什么呢??
接口
Subject
Observable
类
Market
Observer
上面画的还是很清楚的,但是我还是贴段代码,看看Subject 是什么情况,就像图上画的那样,三个方法,一个订阅,一个取消,一个通知,
public interface Subject {
void registerObservable(Observable observable);
void removeObservable(Observable observable);
void notifyObservable();
}
在看看Market里面有什么东西
public class Market implements Subject {
private List<Observable> observableList = new ArrayList<>();
private String goods;
private BigDecimal price;
public void updateGoods(String goods,BigDecimal price){
this.goods = goods;
this.price = price;
notifyObservable();
}
public String getUpdateInfo(){
return "商品名:"+goods+"\n价格"+price;
}
@Override
public void registerObservable(Observable observable) {
observableList.add(observable);
}
@Override
public void removeObservable(Observable observable) {
observableList.remove(observable);
}
@Override
public void notifyObservable() {
for(Observable observable:observableList){
observable.update();
}
}
}
最最最重要的是Market中保存了所有的Observable,其实就是说作为商场,我知道有多少人给了我联系方式,好通知周围的小伙伴们。
之后的Observer 就简单了,只要订阅了商场,就能得到消息
public class Observer implements Observable {
private Market market;
public Observer(Market market){
this.market = market;
//most important
market.registerObservable(this);
}
@Override
public void update() {
System.out.println(getClass().getName()+market.getUpdateInfo());
}
}
最后当然是贴上main函数的代码以及运行时的结果咯
public class Main {
public static void main(String[] args) {
Market market = new Market();
Observer observer = new Observer(market);
market.updateGoods("牛肉", BigDecimal.valueOf(3.5));
market.removeObservable(observer);
market.updateGoods("牛肉", BigDecimal.valueOf(3.6));
market.registerObservable(observer);
market.updateGoods("牛肉", BigDecimal.valueOf(3.7));
}
}
OK,that`s it.
如果觉得我写的有什么问题!欢迎大家指正!