java觀察者模式的三種實(shí)現(xiàn)方式代碼實(shí)例
java觀察者模式的三種實(shí)現(xiàn)方式
Java中可以使用觀察者模式開發(fā),有三種簡單的方式可以實(shí)現(xiàn)。
自定義接口實(shí)現(xiàn)
觀察者
public interface Observer { public void update(Object o); }
觀察者的實(shí)現(xiàn)
public class ObserverImpl implements Observer{ private Object str; @Override public void update(Object o) { this.str = o; System.out.println(this.str); } }
觀察者的注入和方法調(diào)用
@Autowired private List<Observer> observers; @GetMapping("impl/{str}") public void impl(@PathVariable("str") String str){ for (Observer observer : observers){ observer.update(str); } }
基于spring的事件
先定義spring事件
public class CustEvent extends ApplicationEvent { public String msg; public CustEvent(Object source, String msg) { super(source); this.msg = msg; } }
事件監(jiān)聽器
@Component public class CustEventListener { @EventListener() public void eventListen(ApplicationEvent applicationEvent){ if(applicationEvent instanceof CustEvent){ CustEvent custEvent = (CustEvent)applicationEvent; System.out.println(custEvent.msg); } } }
發(fā)布事件
@GetMapping("event/{str}") public void event(@PathVariable("str") String str){ context.publishEvent(new CustEvent(this,str)); }
基于Java原生接口
實(shí)現(xiàn)java.util.Observer
public class JavaObserverA implements Observer { private int myState; @Override public void update(Observable o, Object arg) { myState = ((JavaConcreteSubject)o).getState(); System.out.println(myState); } }
繼承Observable類,注意發(fā)布時(shí)要調(diào)用父類的setChanged()和notifyObservers()方法
public class JavaConcreteSubject extends Observable { private int state; public void set(int s){ state = s; //目標(biāo)對(duì)象的狀態(tài)發(fā)生了改變 setChanged(); //表示目標(biāo)對(duì)象已經(jīng)做了更改 notifyObservers(state); //通知所有的觀察者 } public int getState() { return state; } }
注冊(cè)觀察者,然后發(fā)布事件
private JavaConcreteSubject subject = new JavaConcreteSubject(); public testController(){ subject.addObserver(new JavaObserverA()); } @GetMapping("util/{str}") public void util(@PathVariable("str") String str){ subject.set(1); }
到此這篇關(guān)于java觀察者模式的三種實(shí)現(xiàn)方式代碼實(shí)例的文章就介紹到這了,更多相關(guān)java觀察者模式實(shí)現(xiàn)方式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring Cloud體系實(shí)現(xiàn)標(biāo)簽路由的方法示例
這篇文章主要介紹了Spring Cloud體系實(shí)現(xiàn)標(biāo)簽路由的方法示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-05-05詳解利用SpringCloud搭建一個(gè)最簡單的微服務(wù)框架
這篇文章主要介紹了詳解利用SpringCloud搭建一個(gè)最簡單的微服務(wù)框架,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-11-11SpringCloud基于Feign實(shí)現(xiàn)遠(yuǎn)程調(diào)用的問題小結(jié)
這篇文章主要介紹了SpringCloud基于Feign遠(yuǎn)程調(diào)用,通過使用 Feign 的方式,我們可以更加優(yōu)雅地進(jìn)行多參數(shù)的遠(yuǎn)程調(diào)用,避免了手動(dòng)拼接URL或構(gòu)建復(fù)雜的請(qǐng)求體,需要的朋友可以參考下2024-02-02基于IOC容器實(shí)現(xiàn)管理mybatis過程解析
這篇文章主要介紹了基于IOC容器實(shí)現(xiàn)管理mybatis過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07關(guān)于mybatis-plus-generator的簡單使用示例詳解
在springboot項(xiàng)目中集成mybatis-plus是很方便開發(fā)的,最近看了一下plus的文檔,簡單用一下它的代碼生成器,接下來通過實(shí)例代碼講解關(guān)于mybatis-plus-generator的簡單使用,感興趣的朋友跟隨小編一起看看吧2024-03-03springboot中實(shí)現(xiàn)通過后臺(tái)創(chuàng)建臨時(shí)表
這篇文章主要介紹了springboot中實(shí)現(xiàn)通過后臺(tái)創(chuàng)建臨時(shí)表操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07springmvc九大組件之HandlerAdapter詳解
這篇文章主要介紹了springmvc九大組件之HandlerAdapter詳解,RequestMappingHandlerAdapter支持的handler的類型是HandlerMethod,而HandlerMethod是通過解析@RequestMapping注解獲得的,需要的朋友可以參考下2023-11-11