防御塔攻击小兵,C++观察者模式

Posted 每天告诉自己要努力

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了防御塔攻击小兵,C++观察者模式相关的知识,希望对你有一定的参考价值。

#include <iostream>
#include <string>
#include <list>
using namespace std;

//通知者抽象类
class Subject;

//观察者抽象类
class Observer 
public:
    Observer(string name, Subject* sub) 
        this->name = name;
        this->sub = sub;
    
    virtual void update() = 0;
protected:
    string name;
    Subject* sub;
;

//通知者抽象类
class Subject 
public:
    string action;
    virtual void attach(Observer*) = 0;
    virtual void detach(Observer*) = 0;
    virtual void notify() = 0;
protected:
    list<Observer*> observers; //观察者列表
;



//具体观察者
class Tower: public Observer 
public:
    Tower(string name, Subject* sub) : Observer(name, sub) 
        
    
    void update() 
        cout << name << "收到消息:" << sub->action << endl;
        if (sub->action == "小兵进塔了") 
            cout << name << ": 攻击小兵" << endl;
        
    
;

//具体通知者
class Soldier: public Subject 
public:
    void attach(Observer* obs) 
        observers.push_back(obs);
    
    void detach(Observer* obs) 
        observers.remove(obs);
    
    void notify() 
        for (auto it : observers) 
            it->update();
        
    
;

int main() 
    
    //小兵是一个通知者
    Subject* soldier = new Soldier();
    
    //被观察的对象
    Observer* A_tower1 = new Tower("防御塔A1", soldier);
    Observer* A_tower2 = new Tower("防御塔A2", soldier);
    Observer* B_tower = new Tower("防御塔B", soldier);
    
    //把三个塔添加到观察队列中
    soldier->attach(A_tower1);
    soldier->attach(A_tower2);
    soldier->attach(B_tower);
    
    //小兵发起行动,并通知各位观察者
    soldier->action = "小兵进塔了";
    soldier->notify();
    cout << endl;
    
    //小兵发起行动,并通知各位观察者
    soldier->action = "小兵没进塔";
    soldier->notify();
    cout << endl;
    
    //把A1塔移出观察者队列,小兵发起行动,并通知各位观察者
    soldier->detach(A_tower1 );
    soldier->action = "小兵进塔了";
    soldier->notify();
    
    return 0;

结果:

以上是关于防御塔攻击小兵,C++观察者模式的主要内容,如果未能解决你的问题,请参考以下文章

团队分工

王者光耀第三次

hdu 4976 A simple greedy problem.

黄埔特种小兵军事夏令营--2018火热招生

二级小兵——工厂模式(Factory Method)

2022-12-20:二狗买了一些小兵玩具,和大胖一起玩, 一共有n个小兵,这n个小兵拍成一列, 第i个小兵战斗力为hi,然后他们两个开始对小兵进行排列, 一共进行m次操作,二狗每次操作选择一个数k,