java觀察者模式的三種實(shí)現(xiàn)方式代碼實(shí)例
java觀察者模式的三種實(shí)現(xiàn)方式
Java中可以使用觀察者模式開(kāi)發(fā),有三種簡(jiǎn)單的方式可以實(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)聽(tīng)器
@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)文章
easycode配置成mybatis-plus模板的實(shí)現(xiàn)方法
本文主要介紹了easycode配置成mybatis-plus模板的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09
JAVA代碼實(shí)現(xiàn)MongoDB動(dòng)態(tài)條件之分頁(yè)查詢
這篇文章主要介紹了JAVA如何實(shí)現(xiàn)MongoDB動(dòng)態(tài)條件之分頁(yè)查詢,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下2020-07-07
java GUI編程之布局控制器(Layout)實(shí)例分析
這篇文章主要介紹了java GUI編程之布局控制器(Layout),結(jié)合實(shí)例形式分析了java GUI編程中布局控制器(Layout)具體功能、用法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2020-01-01
Springboot 整合 Java DL4J 實(shí)現(xiàn)時(shí)尚穿搭推薦系統(tǒng)(實(shí)例代碼)
本文介紹了如何使用SpringBoot和JavaDeeplearning4j框架搭建一個(gè)時(shí)尚穿搭推薦系統(tǒng),文章詳細(xì)闡述了系統(tǒng)的技術(shù)架構(gòu)、數(shù)據(jù)集格式、Maven依賴配置、模型訓(xùn)練和預(yù)測(cè)代碼實(shí)現(xiàn),以及單元測(cè)試和預(yù)期輸出結(jié)果2024-10-10
解決MybatisPlus批量插入數(shù)據(jù)報(bào)錯(cuò):Error getting generated 
在使用MybatisPlus進(jìn)行批量插入數(shù)據(jù)時(shí)遇到空指針異常錯(cuò)誤,分析原因是由于主鍵生成策略導(dǎo)致的,嘗試通過(guò)設(shè)置useGeneratedKeys屬性解決問(wèn)題,但因批量插入方法限制,該方法未能成功,最終通過(guò)自定義mapper方法實(shí)現(xiàn)批量插入,解決了問(wèn)題2024-09-09
解決mybatis 執(zhí)行mapper的方法時(shí)報(bào)空指針問(wèn)題
關(guān)于Integer.parseInt()方法的使用

