最近早上地鐵上一直看設計模式,代碼中卻使用不上,今天剛好碰到一個新需求,感受和發佈訂閱模式有點相同,借用了一下理念,雖然代碼寫的很爛,可是仍是第一次去試着用設計模式,記錄一下成長的第一步。前端
需求大概是,往前端推送數據的時候,由於涉及到整個北京市的數據和北京市各個地區的數據,當前端不給我發送請求的時候,我這邊是正常推整個北京市新增的數據,而當前端給我發送請求的時候,會帶着某個區的行政編碼,這時候我發送整個北京市數據就要中止,轉而給推送這個區的數據,而當前端發請求通知我改成整個北京市數據的時候,再次改變,我把前端的請求當作通知者,根據請求的不一樣改變查閱的狀態,把個人推送當作訂閱者,根據發佈者查閱狀態的變化,推送不一樣的數據。設計模式
通知者代碼以下api
@RestController @RequestMapping("/api/notify") public class ZoneSubject { @Resource(name = "zoneObserver") private Observer observer; private Boolean state; private Integer zone; public void Notify(){ observer.update(); } @RequestMapping("/city") public void updateState(){ this.state=true; this.Notify(); } @RequestMapping("/area/{zone}") public void getTip(@PathVariable Integer zone){ this.state=false; this.zone=zone; this.Notify(); }
觀察者代碼以下app
@Component(value = "zoneObserver") public class ZoneObserver extends Observer{ @Resource private ZoneSubject zoneSubject; @Resource(name = "alarmToTVService") private AlarmToTVService alarmToTVService; private Boolean state=false; private Integer zone=110000; @Override public void update() { this.state=zoneSubject.getState(); this.zone=zoneSubject.getZone(); } public void sendTip(String type){ if(type.equals("0")){ alarmToTVService.sendTipFocusToTV(type); }else { if (state) { alarmToTVService.sendTipFocusToTV(type); } else { alarmToTVService.sendTipFocus(type, zone); } } } }
其他地方調用觀察者的sendTip()方法時,就會給推送對應的數據了。ide