C++11中结者模式展示

2021-07-15  本文已影响0人  FredricZhu

题目


image.png

这个中文翻译挺cao蛋的,我也不知道翻译的对不对。
这个模式其实像个中介。
所有对象不持有其他对象的直接引用。
而是引用一个中结者对象。
这里的中结者对象就是 Mediator。
Mediator中持有所有对象的集合。
比较典型的应用是聊天室场景。
代码如下,


#include <algorithm>
#include <vector>
using namespace std;


struct IParticipant {
    virtual void say(int value) = 0;
};

// 前置声明
struct Participant;

struct Mediator {
    vector<Participant*> participants;
};

struct Participant : IParticipant
{
    int value{0};
    Mediator& mediator;

    Participant(Mediator &mediator) : mediator(mediator)
    {
      mediator.participants.push_back(this);
    }

    void say(int value)
    {
        std::for_each(begin(mediator.participants), end(mediator.participants), [&](Participant*&  p){
           if(p!=this) {
               p->value = value;
           } 
        }); 
    }
};
上一篇 下一篇

猜你喜欢

热点阅读