栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

设计模式-观察者模式

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

设计模式-观察者模式

本文是C++代码

当一个对象的改变需要同时改变其他对象时,可以考虑使用观察者模式。

解耦和,让耦合双方都依赖于抽象,而不是依赖具体的实现。从而使得各自的变化不会影响到另一边的变化。

 

Observer.h

#ifndef OBSERVER_H_
#define OBSERVER_H_

#include
using namespace std;


class Observer{
public:
    virtual void update() = 0; // 
    virtual ~Observer(){}
};

class Staff : public Observer{
public:
    virtual void update(){
        cout << "老板下发新消息了。。。。。。" << endl;
    }
};
#endif

Subject.h

#ifndef SUBJECT_H_
#define SUBJECT_H_
#include
using namespace std;
#include
#include
#include "Observer.h"

class Subject{
public:
    virtual void attach(Observer* observer) = 0; // 添加订阅消息的观察者
    virtual void detach(Observer* observer) = 0; // 删除订阅消息的观察者
    virtual void notify() = 0; // 执行通知
    virtual ~Subject(){}
};

//实现部分,应该另起一个文件-------------------------------
class Boss : public Subject{
private:
    list observers;
public:
    // 添加订阅消息的观察者
    virtual void attach(Observer* observer){
        observers.push_back(observer);
    }
    // 删除订阅消息的观察者
    virtual void detach(Observer* observer){
        observers.remove(observer);
    } 
    // 执行通知
    virtual void notify(){
        list::iterator itr = observers.begin();
        // 遍历观察者并更新通知
        while(itr != observers.end()){
            (*itr)->update();
        }
    } 
    virtual ~Boss(){}
};
#endif

main.cpp

#include "Subject.h"
int main(){
    // 创建Boss对象
    Boss *boss = new Boss;
    Staff *staff1 = new Staff;
    boss->attach(staff1);
    boss->notify();
    delete boss;
    return 0;
}

 好网站推荐:观察者模式 | 菜鸟教程观察者模式 当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知依赖它的对象。观察者模式属于行为型模式。 介绍 意图:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 主要解决:一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作。 何时使用:一个对象(目标对象)的状态发生改变,所有的依..https://www.runoob.com/design-pattern/observer-pattern.html

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/643666.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号