第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

設(shè)計(jì)模式——觀察者模式

標(biāo)簽:
設(shè)計(jì)

1. 介绍

当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)

当一个对象被修改时,则会自动通知它的依赖对象(广播)。观察者模式属于行为型模式。

回到顶部

2. 类定义

定义观察者接口和被观察者抽象类

public interface Observer {    void update(String msg);
}

复制代码

public abstract class Observerable {
    final List<Observer>  observerList = new ArrayList<>();
    void registerObserver(Observer observer) {}
    void removeObserver(Observer observer) {}
    void notifyObserver(String msg) {}
}

复制代码

定义实现被观察者的具体类

复制代码

public class WechatServer extends Observerable{
    @Override    public void registerObserver(Observer observer) {        if (!observerList.contains(observer)) {
            observerList.add(observer);
            System.out.println("add " + observer + " success");
        }
    }

    @Override    public void removeObserver(Observer observer) {        if (!observerList.isEmpty()) {
            observerList.remove(observer);
            System.out.println("remove " + observer + " sucess");
        }
    }

    @Override    public void notifyObserver(String msg) {        for (Observer observer : observerList) {
            observer.update(msg);
        }
    }
}

复制代码

定义实现观察者的2个具体类

复制代码

public class PhoneObserver implements Observer{
    @Override    public void update(String msg) {
        System.out.println("phone receive:" + msg);
    }
}

复制代码

复制代码

public class BookObserver implements Observer{
    @Override    public void update(String msg) {
        System.out.println("Book receive " + msg);
    }
}

复制代码

回到顶部

3.测试

复制代码

public class ObserverTest {    public static void main(String[] args) {
        Observerable observerable = new WechatServer();
        Observer phone = new PhoneObserver();
        Observer book = new BookObserver();
        observerable.registerObserver(phone);
        observerable.registerObserver(book);

        observerable.notifyObserver("hello world");

        observerable.removeObserver(book);
        observerable.notifyObserver("the second try");

        observerable.removeObserver(book);
        observerable.notifyObserver("the second try");

    }
}

复制代码

结果


add com.jihite.ObserverPattern.PhoneObserver@5674cd4d successadd com.jihite.ObserverPattern.BookObserver@63961c42 successphone receive:hello worldBook receive hello worldremove com.jihite.ObserverPattern.BookObserver@63961c42 sucessphone receive:the second tryremove com.jihite.ObserverPattern.BookObserver@63961c42 sucessphone receive:the second try

回到顶部

4.总结

优点: 

  • 观察者和被观察者是抽象耦合的

  • 建立一套触发机制

缺点

  • 如果一个被观察者对象有很多的直接和间接的观察者的话,将所有的观察者都通知到会花费很多时间。

  • 如果在被观察者之间有循环依赖的话,被观察者会触发它们之间进行循环调用,导致系统崩溃。在使用观察者模式是要特别注意这一点

  • 虽然观察者模式可以随时使观察者知道所观察的对象发生了变化,但是观察者模式没有相应的机制使观察者知道所观察的对象是怎么发生变化的

原文出处: https://www.cnblogs.com/kaituorensheng/p/9895747.html  

點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消