成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

觀察者模式(ObserverPattern)-創(chuàng)新互聯(lián)

觀察者模式(Observer Pattern)是一種行為型設(shè)計(jì)模式,它定義了一種一對(duì)多的依賴關(guān)系,讓多個(gè)觀察者對(duì)象同時(shí)監(jiān)聽(tīng)一個(gè)主題對(duì)象。這個(gè)主題對(duì)象在狀態(tài)發(fā)生變化時(shí),會(huì)通知所有的觀察者對(duì)象,使它們能夠自動(dòng)更新自己。

在鳳凰等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作 網(wǎng)站設(shè)計(jì)制作按需網(wǎng)站策劃,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),成都全網(wǎng)營(yíng)銷推廣,成都外貿(mào)網(wǎng)站制作,鳳凰網(wǎng)站建設(shè)費(fèi)用合理。

在觀察者模式中,有三個(gè)角色:

  • 主題(Subject):主題對(duì)象知道它的觀察者,并提供注冊(cè)和刪除觀察者的接口。
  • 觀察者(Observer):為那些在目標(biāo)發(fā)生改變時(shí)需要獲得通知的對(duì)象定義一個(gè)更新接口。
  • 具體觀察者(ConcreteObserver):存儲(chǔ)與主題的狀態(tài)自恰的狀態(tài)。具體觀察者角色實(shí)現(xiàn)了抽象觀察者角色所要求的更新接口,以便使本身的狀態(tài)與主題的狀態(tài) 像協(xié)調(diào)。

#include#include// 定義抽象主題類
class Subject
{
public:
    virtual ~Subject() {}
    // 注冊(cè)觀察者
    virtual void registerObserver(Observer* observer) = 0;
    // 刪除觀察者
    virtual void removeObserver(Observer* observer) = 0;
    // 通知觀察者
    virtual void notifyObservers() = 0;
};

// 定義抽象觀察者類
class Observer
{
public:
    virtual ~Observer() {}
    // 更新方法
    virtual void update(Subject* subject) = 0;
};

// 定義具體主題類
class ConcreteSubject : public Subject
{
public:
    ConcreteSubject() : state_(0) {}
    // 獲取狀態(tài)
    int getState() const { return state_; }
    // 設(shè)置狀態(tài)
    void setState(int state)
    {
        state_ = state;
        // 狀態(tài)改變,通知所有的觀察者
        notifyObservers();
    }
    void notifyObservers()
    {
        // 遍歷所有的觀察者,調(diào)用更新方法
        for (Observer* observer : observers_)
        {
            observer->update(this);
        }
    }

    void registerObserver(Observer* observer)
    {
        observers_.push_back(observer);
    }

    void removeObserver(Observer* observer)
    {
        // 從觀察者列表中刪除觀察者
        for (auto it = observers_.begin(); it != observers_.end(); ++it)
        {
            if (*it == observer)
            {
                observers_.erase(it);
                break;
            }
        }
    }

private:
    int state_;
    std::vectorobservers_;
};

// 定義具體觀察者類
class ConcreteObserver : public Observer
{
public:
    ConcreteObserver(ConcreteSubject* subject, int id) : subject_(subject), id_(id)
    {
        // 注冊(cè)觀察者
        subject_->registerObserver(this);
    }
    ~ConcreteObserver()
    {
        // 刪除觀察者
        subject_->removeObserver(this);
    }
    // 更新方法
    void update(Subject* subject)
    {
        if (subject == subject_)
        {
            std::cout<< "Observer "<< id_<< ": subject state is "<< subject_->getState()<< std::endl;
        }
    }

private:
    ConcreteSubject* subject_;
    int id_;
};

int main()
{
    ConcreteSubject* subject = new ConcreteSubject();
    // 創(chuàng)建觀察者
    Observer* observer1 = new ConcreteObserver(subject, 1);
    Observer* observer2 = new ConcreteObserver(subject, 2);
    // 改變主題的狀態(tài)
    subject->setState(1);
    // 再次改變主題的狀態(tài)
    subject->setState(2);
    // 刪除觀察者
    delete observer1;
    delete observer2;
    delete subject;
    return 0;
}

觀察者模式有以下幾個(gè)優(yōu)點(diǎn):

  • 觀察者模式可以實(shí)現(xiàn)表示層和數(shù)據(jù)邏輯層的分離,并使得表示層和數(shù)據(jù)邏輯層的變化獨(dú)立。
  • 觀察者模式支持廣播通信。
  • 觀察者模式簡(jiǎn)化了對(duì)象之間的依賴關(guān)系,每個(gè)對(duì)象只需保存有關(guān)自己的狀態(tài),無(wú)需保存有關(guān)其他對(duì)象的狀態(tài),這避免了系統(tǒng)中對(duì)象之間的耦合關(guān)系。

觀察者模式也有一些缺點(diǎn):

  • 觀察者模式會(huì)增加系統(tǒng)的復(fù)雜度,因?yàn)榭赡軙?huì)有很多的觀察者,所以需要維護(hù)這些觀察者之間的注冊(cè)關(guān)系。
  • 如果一個(gè)觀察者對(duì)象的更新操作比較慢,會(huì)導(dǎo)致系統(tǒng)的效率降低。
  • 觀察者模式?jīng)]有相應(yīng)的機(jī)制讓觀察者知道所觀察的目
  • 主題對(duì)象與觀察者之間存在較強(qiáng)的耦合關(guān)系,一旦建立了這種關(guān)系,很難撤銷。

  • 主題對(duì)象的更新需要通知所有的觀察者,如果觀察者數(shù)量較多,會(huì)導(dǎo)致性能下降。

  • 觀察者之間存在循環(huán)依賴關(guān)系時(shí),可能會(huì)導(dǎo)致系統(tǒng)崩潰。

  • 主題對(duì)象的狀態(tài)發(fā)生變化時(shí),可能會(huì)導(dǎo)致觀察者的狀態(tài)發(fā)生變化,這樣就可能會(huì)出現(xiàn)無(wú)限遞歸的情況。

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

名稱欄目:觀察者模式(ObserverPattern)-創(chuàng)新互聯(lián)
新聞來(lái)源:http://jinyejixie.com/article38/dhojsp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、定制網(wǎng)站、軟件開(kāi)發(fā)網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、建站公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁(yè)設(shè)計(jì)
通化市| 纳雍县| 武穴市| 方城县| 宜阳县| 县级市| 沁阳市| 来宾市| 裕民县| 进贤县| 巴中市| 四子王旗| 昌宁县| 天祝| 祁连县| 天祝| 勐海县| 九龙坡区| 噶尔县| 茌平县| 嘉兴市| 缙云县| 托克逊县| 镶黄旗| 巧家县| 菏泽市| 青阳县| 宁津县| 枝江市| 海城市| 望谟县| 福州市| 迭部县| 大姚县| 句容市| 临颍县| 田林县| 白水县| 阳城县| 武鸣县| 青田县|