首页 > 其他分享 >调停者(中介)模式

调停者(中介)模式

时间:2023-12-26 16:13:43浏览次数:30  
标签:Colleague string Mediator pCPU 模式 中介 pMediator 调停者 CPU

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

class Colleague;
class Mediator {
public:
    //对象在自身改变的情况下,通知Mediator进行变更
    //让我们Mediator这个总线,负责相应的同事对象的交互
    virtual void changed(Colleague* pColleague) = 0;
protected:
    Mediator() {};
};

class  Colleague
{
public:
    Colleague() {}
    Colleague(Mediator* pMediator):m_pMediator(pMediator){}
    
    Mediator* getMediator() {
        return m_pMediator;
    }

private:
    Mediator* m_pMediator;
};

class SoundCard :public Colleague {
public:
    //模拟声卡的工作
    SoundCard(Mediator* pMediator):Colleague(pMediator){}
    void soundData(string data) {
        cout << "声卡在工作" <<data<< endl;
    }
};

class VideoCard :public Colleague {
public:
    VideoCard(Mediator *pMediator):Colleague(pMediator){}
    void VideoData(string data) {
        cout << "显卡在工作" << data << endl;
    }
};

class CPU :public Colleague {
public:
    CPU(Mediator *pMediator):Colleague(pMediator){}
    void executeData(string data[]) {
        m_strVideoData = data[0];
        m_strSoundData = data[1];
        this->getMediator()->changed(this);

    }
    string getVideoData() {
        return m_strVideoData;
    }
    string getSoundData() {
        return m_strSoundData;
    }
private:
    string m_strVideoData;
    string m_strSoundData;
};

class MotherBoard :public Mediator {
public:
    void setCPU(CPU* pCpu) {
        m_pCPU = pCpu;
    }

    void setVideoCard(VideoCard* pVC) {
        m_pVideoCard = pVC;
    }
    void setSoundCard(SoundCard* pSC) {
        m_pSoundCard = pSC;
    }
    void changed(Colleague* pColleague) {
        if (pColleague == m_pCPU) {
            this->openCPU((CPU*)pColleague);
    }
    }
private:
    void openCPU(CPU* pCPU) {
        //主板开始进行各个部件的运行,首先调用CPU,将处理好的数据得到
        string strVideoData = pCPU->getVideoData();
        string strSoundData = pCPU->getSoundData();
        //将这些处理好的数据交付给SoundCard,VideoCard,让他们工作
        m_pVideoCard->VideoData(strVideoData);
        m_pSoundCard->soundData(strSoundData);
    }
private:
    CPU* m_pCPU;
    VideoCard* m_pVideoCard;
    SoundCard* m_pSoundCard;
};

int main() {
    //创建Mediator
    MotherBoard* pMediator = new MotherBoard;
    //创建同事类的对象
    CPU* pCPU = new CPU(pMediator);
    VideoCard* pVC = new VideoCard(pMediator);
    SoundCard* pSC = new SoundCard(pMediator);
    //让Mediator都知道这些Colleague的对象
    pMediator->setCPU(pCPU);
    pMediator->setSoundCard(pSC);
    pMediator->setVideoCard(pVC);
    //让我们的数据运行起来
    string arr[] = { "跟着老夏学开发","升职加薪就找他" };
    pCPU->executeData(arr);//看上去,好像CPU就在做自己的事情
    system("pause");
    return 0;
}
View Code

 

标签:Colleague,string,Mediator,pCPU,模式,中介,pMediator,调停者,CPU
From: https://www.cnblogs.com/zeliangzhang/p/17928353.html

相关文章

  • Dart设计模式之代理模式
    dart设计模式之代理模式代理模式模式分析在代理模式(ProxyPattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。模式难点模式解决问题在直接访问对象时带来的问题,比如说:要访问的对象在远程的机......
  • Dart设计模式之享元模式
    dart设计模式之享元模式享元模式(Flyweight)模式分析享元模式(FlyweightPattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。享元模式尝试重用现有的同类对象,如果未找到匹配的对......
  • 设计模式之命令模式
    (命令模式)命令模式将方法调用封装起来,通过封装方法调用,将运算块包装成型。调用次运算的对象不需要关心事情是如何进行的,只要知道如何使用包装成型的方法来完成它就可以。应用于记录日志,或者重复使用这些封装来实现撤销。命令模式可将“动作的请求者”从“动作的执行者”对象中......
  • c# 责任链模式
    责任链模式是一种行为型设计模式,它允许多个对象按照链式结构处理请求,直到有对象能够处理请求为止。在C#中,责任链模式通常通过构建一个处理请求的链来实现。下面是一个简单的示例:首先,定义一个处理请求的抽象基类Handler,该类包含一个指向下一个处理者的引用:publicabstractclass......
  • C# 适配器模式
    适配器模式是一种结构型设计模式,它可以将一个或多个不兼容的接口适配成客户端期望的接口。在C#中,适配器模式通常采用类适配器或对象适配器的方式实现。下面是一个简单的类适配器示例:首先,定义一个客户端期望的目标接口,例如ICircle:publicinterfaceICircle{voidDraw(intx......
  • 迭代器模式揭秘:如何优雅应对数据遍历
    推荐语在这篇文章中,深入探讨了迭代器模式的核心原理和实战应用。通过清晰而有条理的解释,读者小伙伴可以领悟到迭代器模式在数据遍历和管理方面的强大能力。无论是初学者还是有经验的开发者,都能从这篇文章中获得实用的知识和技巧,进一步提升代码的可读性和可维护性。什么是迭代器模......
  • 线程池模式
    概念线程池模式(ThreadPoolPattern)是一种用于管理线程的设计模式。它通过预先创建一组线程,并维护一个任务队列,将需要执行的任务提交给线程池来执行,从而避免了频繁地创建和销毁线程的开销,提供了线程的重用和线程生命周期的管理。线程池模式的主要目标是提高线程的利用率、减少线......
  • 备忘录模式(Memento)
    #include<iostream>#include<string>usingnamespacestd;classOriginalWord;classMemento{public:Memento(stringstrWord):m_strWord(strWord){}private:friendclassOriginalWord;stringGetWords(){returnm_strWord......
  • Docker部署Redis7.X版本Cluster模式三主三从集群
    前言:最近给客户部署项目提供三台机器,需要用到redis就想着部署RedisCluster模式集群,但是找遍了csdn都没找到我想要的。花了好久参考了很多博主的帖子终于让我搞出来了,个人比较菜各位看官老爷见笑。话不多说开搞!!!!!!安装前准备:1.在三台机器上分别创建对应配置文件夹,一台机器两个节点(一......
  • java模式之-创建型模式
    typora-copy-images-to:uploadtypora-copy-images-to:upload一、设计模式的概述和分类二、单例模式1、介绍2、单例模式有八种方式:1)饿汉式(单线程推荐)2)懒汉式(线程不安全)3)双重检查(推荐)4、静态内部类(推荐)5、枚举6、注意事项三、工厂设计模式1、简单工厂模式2、工厂方法模式3、......