最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java觀察者模式的三種實(shí)現(xiàn)方式代碼實(shí)例

 更新時(shí)間:2023年10月25日 09:03:30   作者:葡萄曉虎  
這篇文章主要介紹了java觀察者模式的三種實(shí)現(xiàn)方式代碼實(shí)例,觀察者模式(又被稱為發(fā)布-訂閱(Publish/Subscribe)模式,屬于行為型模式的一種,它定義了一種一對(duì)多的依賴關(guān)系,讓多個(gè)觀察者對(duì)象同時(shí)監(jiān)聽(tīng)某一個(gè)主題對(duì)象,需要的朋友可以參考下

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)文章

  • 使用FastJSON解析JSON發(fā)生異常的踩坑記錄

    使用FastJSON解析JSON發(fā)生異常的踩坑記錄

    這篇文章主要為大家詳細(xì)介紹了使用FastJSON解析JSON發(fā)生異常的問(wèn)題原因分析以及對(duì)應(yīng)的解決方法,文章的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下
    2025-09-09
  • 解決mybatis 執(zhí)行mapper的方法時(shí)報(bào)空指針問(wèn)題

    解決mybatis 執(zhí)行mapper的方法時(shí)報(bào)空指針問(wèn)題

    這篇文章主要介紹了解決mybatis 執(zhí)行mapper的方法時(shí)報(bào)空指針問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • java實(shí)現(xiàn)登錄窗口

    java實(shí)現(xiàn)登錄窗口

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)登錄窗口,含驗(yàn)證碼驗(yàn)證、賬戶注冊(cè)等,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • 關(guān)于Integer.parseInt()方法的使用

    關(guān)于Integer.parseInt()方法的使用

    這篇文章主要介紹了關(guān)于Integer.parseInt()方法的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • 最新評(píng)論

    怀仁县| 公安县| 蓬莱市| 阿城市| 偃师市| 秦安县| 玉溪市| 抚远县| 开封市| 株洲县| 铁岭县| 阳城县| 凉山| 化隆| 桐乡市| 康平县| 阳城县| 墨竹工卡县| 瓮安县| 尉氏县| 尉犁县| 汽车| 滁州市| 仁化县| 佛坪县| 曲靖市| 台中县| 峨山| 蒲城县| 肥东县| 安丘市| 大关县| 肇庆市| 洞头县| 体育| 类乌齐县| 襄樊市| 吴忠市| 赣州市| 平山县| 柘荣县|