设计模式之中介者模式(Mediator)的C++实现

这篇具有很好参考价值的文章主要介绍了设计模式之中介者模式(Mediator)的C++实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、中介者模式的提出

在软件组件开发过程中,如果存在多个对象,且这些对象之间存在的相互交互的情况不是一一对应的情况,这种功能组件间的对象引用关系比较复杂,耦合度较高。如果有一些新的需求变化,则不易扩展。中介者模式可以解决这种问题。中介者模式使用一个“中介对象”去管理对象间的关联关系,这个中介对象里面定义了对象间的数据统一交互接口,解耦对象间的直接交互依赖,从而提高代码的扩展性。

2、需求描述

有2个线上人员,这两个线上人员可以相互发送和接收对象的消息。设计一个线上人员数据交互的代码,且代码架构便于扩展。

3、中介者模式的代码实现

(1)UML图如下:

设计模式之中介者模式(Mediator)的C++实现,设计模式,设计模式,中介者模式

 

 (2)代码实现如下:

#include <iostream>
#include <vector>

class Mediator;
class OnlinerPeople
{
protected:
    Mediator* mediator;
public:
    virtual void sendMsg(std::string msg)=0;
    virtual void receiveMsg(std::string msg)=0;
    virtual ~OnlinerPeople(){};
};

class Mediator
{
protected:
    std::vector<OnlinerPeople*>vecOnlinePeoples;
public:
    virtual void sendMessage(std::string msg,OnlinerPeople* pepole)=0;
    virtual void addOnliners(OnlinerPeople* people)=0;
    virtual ~Mediator(){};
};

class ConcreteMediator:public Mediator
{
public:
    void addOnliners(OnlinerPeople* people)override
    {
        vecOnlinePeoples.emplace_back(people);
    };

    virtual void sendMessage(std::string msg, OnlinerPeople *pepole) override
    {
        for(auto it =  vecOnlinePeoples.begin();it != vecOnlinePeoples.end(); it++)
        {
            if( *it != pepole)
            {
               (*it)->receiveMsg(msg);
            }
        }
    }
};



class OnlinerPeople1:public OnlinerPeople
{
public:
    void Init(Mediator* mediator){
        this->mediator = mediator;
    }

    virtual void sendMsg(std::string msg) override
    {
        std::cout << "OnlinerPeople1 sendMsg: " << std::endl;
        mediator->sendMessage(msg,this);
    }

    virtual void receiveMsg(std::string msg) override
    {
        std::cout << "OnlinerPeople1 receive msg: " << msg << std::endl;
    }
};

class OnlinerPeople2:public OnlinerPeople
{
public:
    void Init(Mediator* mediator){
        this->mediator = mediator;
    }

    virtual void sendMsg(std::string msg) override
    {
        std::cout << "OnlinerPeople2 sendMsg: " << std::endl;
        mediator->sendMessage(msg,this);
    }

    virtual void receiveMsg(std::string msg) override
    {
        std::cout << "OnlinerPeople2 receive msg: " << msg << std::endl;
    }
};
class Client
{
private:
    Mediator* mediator{nullptr};
    OnlinerPeople1 people1;
    OnlinerPeople2 people2;
public:
    Client(Mediator* p){
        mediator = p;
        people1.Init(mediator);
        people2.Init(mediator);
     };
    void DoWork()
    {
        mediator->addOnliners(&people1);
        mediator->addOnliners(&people2);
        people1.sendMsg("hello people2");
        people2.sendMsg("hello people1");
    };
};

int main()
{
    Mediator* mediator = new ConcreteMediator();
    Client obj(mediator);
    obj.DoWork();

    delete mediator;
    mediator = nullptr;
    return 0;
}

 程序运行结果如下: 

设计模式之中介者模式(Mediator)的C++实现,设计模式,设计模式,中介者模式文章来源地址https://www.toymoban.com/news/detail-663705.html

到了这里,关于设计模式之中介者模式(Mediator)的C++实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 设计模式——中介者模式

    中介者模式(Mediator Pattern)是一种行为型设计模式,它旨在减少多个对象之间的相互引用和耦合度。通过引入一个中介对象来封装一系列交互行为,使得原本复杂的网状关系结构转变为星形结构,所有对象与中介者通信而不是彼此直接通信。 抽象中介者(Mediator Interface):

    2024年01月18日
    浏览(9)
  • 设计模式-中介者模式

    设计模式-中介者模式

    本文将详细介绍设计模式中的中介者模式,其中包括,中介者模式的优点、缺点、各组成部分。 中介者模式(Mediator Pattern)是一种设计模式,它定义了一个中介者类,该类将多个对象之间的通信抽象化,使得这些对象可以通过中介者进行通信,从而降低它们之间的直接耦合

    2024年02月09日
    浏览(4)
  • 设计模式篇---中介者模式

    设计模式篇---中介者模式

    中介者模式:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。 就好比世界各个国家之间可能会产生冲突,但是当产生冲突的时候需要联合国来解决冲突。每个国家之间的关系,就好

    2024年01月22日
    浏览(11)
  • 设计模式之中介者模式

    设计模式之中介者模式

    详细介绍         中介者模式(Mediator Pattern)是一种行为设计模式, 它通过定义一个中介类来封装多个对象之间的交互,使各对象不需要显示地相互引用,从而降低耦合度,提高系统的可维护性和灵活性。中介者模式将原本一对多的网状关系转变为一对多的关系,即每个

    2024年04月29日
    浏览(32)
  • 设计模式(十七)中介者

    设计模式(十七)中介者

    义一个对象来封装一系列的对象交互。中介者模式使各对象不需要显示地相互引用,从而使其耦合松散,而且可以让你相对独立地改变它们之间的交互。中介者模式又称为调停模式,它是一种对象说行为型模式。 在中介者模式中,引入了用于协调其他对象/类之间的相互调用

    2024年02月04日
    浏览(6)
  • Java设计模式-中介者模式

    中介者模式,就是用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地互相引用,从而使其耦合松散,而且可以独立的改变它们之间的交互。 其实中介者模式很简单的,就像它的名字一样,中介,调用某个类的某些方法的时候,我们不直接去跟那个类的实

    2024年02月15日
    浏览(6)
  • 大话设计模式之中介者模式

    大话设计模式之中介者模式

    中介者模式是一种行为型设计模式,它通过引入一个中介者对象来封装一系列对象之间的交互,从而减少对象之间的直接通信,使得对象之间的耦合度降低,同时提高了系统的可维护性和灵活性。 在中介者模式中,对象之间的通信不再直接发生,而是通过中介者对象来进行。

    2024年04月16日
    浏览(6)
  • 行为型设计模式——中介者模式

    行为型设计模式——中介者模式

    中介者模式主要是将关联关系由一个中介者类统一管理维护,一般来说,同事类之间的关系是比较复杂的,多个同事类之间互相关联时,他们之间的关系会呈现为复杂的网状结构,这是一种过度耦合的架构,即不利于类的复用,也不稳定。例如在下左图中,有六个同事类对象

    2024年01月18日
    浏览(9)
  • 经典的设计模式17——中介者模式

    定义: 用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变他们之间的交互。 结构: 抽象中介者角色:是中介者的接口,提供了同事对象注册与转发同事对象信息的抽象方法。 具体中介者角色:实现中

    2024年02月09日
    浏览(8)
  • 《设计模式的艺术》笔记 - 中介者模式

            中介者模式用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。中介者模式又称为调停者模式,它是一种对象行为模式。 myclass.h myclass.cpp main.cpp         1. 中介者模式简化了

    2024年01月24日
    浏览(7)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包