觀察者模式:微博關注通知功能
阿新 • • 發佈:2018-11-12
上篇文章是理論,這篇文章是結合業務場景處理具體需求。
就拿微博關注來舉個例子,一些人關注了一個大V,那麼大V每次發微博,這些人就會收到推送,哪天大V發的微博讓某些人不爽了,果斷取關,那麼以後就不會收到大V的推送訊息了。
新建Subject介面
public interface Subject { public void addFans(Observer observer);//新增粉絲 public void removeFans(Observer observer);//移除粉絲 public void notifyFans(String str);//通知粉絲 }
新建Observer介面
public interface Observer {
//當主題呼叫notifyFans發通知時,update方法會被回撥
public void update(String str);
}
新建Subject實現類
public class VSubject implements Subject{ List<Observer> observers = new ArrayList<>(); public void publish(String str){ System.out.println("大V釋出微博:" + str); // 通知所有粉絲 this.notifyFans(str); } @Override public void addFans(Observer observer) { observers.add(observer); } @Override public void removeFans(Observer observer) { observers.remove(observer); } @Override public void notifyFans(String str) { for(Observer observer : observers){ observer.update(str); } }
新建Observer實現類
public class FansObserver implements Observer{
private String name;
public FansObserver(String name) {
this.name = name;
}
@Override
public void update(String str) {
System.out.println(name + " 收到大V的微博發文:" + str);
}
}
新建測試類
public class Client { public static void main(String[] args) { VSubject vs = new VSubject(); List<FansObserver> fans = new ArrayList<>(); for(int i=0;i<5;i++){ FansObserver f = new FansObserver("name" + (i + 1)); fans.add(f);//粉絲關注了大v vs.addFans(f); } vs.publish("我的女朋友真好看!");// 本次發微博,5個粉絲都收到推送 for(int i=0;i<2;i++){ vs.removeFans(fans.get(i)); } vs.publish("我要送所有粉絲一部iPhone X");//這次發微博,那兩個取關的人就看不到了 } }
執行結果
大V釋出微博:我的女朋友真好看!
name1 收到大V的微博發文:我的女朋友真好看!
name2 收到大V的微博發文:我的女朋友真好看!
name3 收到大V的微博發文:我的女朋友真好看!
name4 收到大V的微博發文:我的女朋友真好看!
name5 收到大V的微博發文:我的女朋友真好看!
大V釋出微博:我要送所有粉絲一部iPhone X
name3 收到大V的微博發文:我要送所有粉絲一部iPhone X
name4 收到大V的微博發文:我要送所有粉絲一部iPhone X
name5 收到大V的微博發文:我要送所有粉絲一部iPhone X