设计模式-观察者模式

本文介绍了观察者模式的基本概念,该模式用于在对象状态改变时通知相关类。通过一个实际例子展示了如何在游戏地图场景中,当Boss出现时,地图会通知已注册的用户(观察者)。主要涉及类包括Person(人物)、Observer(观察者)和Map(地图),实现了当地图状态变化时,自动更新所有观察者的功能。
摘要由CSDN通过智能技术生成
学习笔记:观察者模式
模式简介

:属于行为型模式,存在一对多的关系时使用。

为什么用

:当一个对象发生一些变化时,需要通知与变化相关的所有类。

怎么样用

:直接在对象中调用其他类的变化相关的方法。

注意事项

:其他类也有要通知的类时,别写成死循环了。

实际举例

:地图通知用户消息。

#include <iostream>
#include <vector>
using namespace std;
//人物
class Person {
private:
    string name;
public:
    friend class Observer;
    Person(){}
    Person(string name) {
        this->name = name;
    }
};
//人物成为观察者
class Observer {
private:
    Person *person;
public:
    Observer(Person *person) {
        this->person = person;
    }
    void update(string meesgae) {
        cout << "客户端[" << person->name << "]" << ": " << meesgae<<"\n";
    }
};
//观察的对象
class Map {
private:
    vector<Observer*>v;
public:
    void addObserver(Observer *observer) {
        v.push_back(observer);
    }
    void refreshBoss() {
        cout << "游戏服务器: Boss加入战场\n";
        notifyAllObserver();
    }
    void notifyAllObserver() {
        int size = v.size();
        for (int i = 0; i < size; ++i) {
            v[i]->update("地图Boss已经刷新,勇士可以前往击杀");
        }
    }
};
int main(){
    //需要观察对象
    Map map;
    //生成观察者
    Observer observer1(new Person("moota"));
    Observer observer2(new Person("vicky"));
    Observer observer3(new Person("quest"));
    //加入观察者
    map.addObserver(&observer1);
    map.addObserver(&observer2);
    map.addObserver(&observer3);
    //变化
    map.refreshBoss();
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值