觀察者,最簡(jiǎn)單的來說就是蜗搔,當(dāng)被觀察者做出了某種舉動(dòng),觀察者能夠第一時(shí)間知道被觀察者做出的舉動(dòng)八堡。
舉個(gè)栗子:現(xiàn)在附近開了一家超市樟凄,但是呢!平常的時(shí)候都是有點(diǎn)小貴的兄渺,只有偶爾的時(shí)候才會(huì)有很便宜的東西缝龄,當(dāng)然超市也知道,so挂谍,超市想著我想讓這附近的人都能夠第一時(shí)間知道我們超市某件商品降價(jià)了叔壤。此刻,超市就成了被觀察者口叙,而周圍的人都成了觀察者炼绘。
超市具體要怎么做我就不知道了!
下面開始講的就是Java庐扫!
圖可能畫的有點(diǎn)問題饭望,虛線沒找到仗哨,等下次在改靶瓮ァ!汗厌漂!
圖上畫的是什么呢萨醒??
接口
Subject
Observable
類
Market
Observer
上面畫的還是很清楚的苇倡,但是我還是貼段代碼富纸,看看Subject 是什么情況,就像圖上畫的那樣旨椒,三個(gè)方法晓褪,一個(gè)訂閱,一個(gè)取消综慎,一個(gè)通知涣仿,
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價(jià)格"+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,其實(shí)就是說作為商場(chǎng),我知道有多少人給了我聯(lián)系方式好港,好通知周圍的小伙伴們愉镰。
之后的Observer 就簡(jiǎn)單了,只要訂閱了商場(chǎng)钧汹,就能得到消息
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());
}
}
最后當(dāng)然是貼上main函數(shù)的代碼以及運(yùn)行時(shí)的結(jié)果咯
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.
如果覺得我寫的有什么問題丈探!歡迎大家指正!