中介者模式

Posted manual-linux

tags:

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

一 概念

  • 中介者模式,用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

二 UML图

  • Mediator 抽象中介者,定义了同事对象到中介者对象的接口
  • Colleague 抽象同事类
  • ConcreteMediator 具体中介者对象,实现抽象类方法,它需要知道所有具体同事类,并从具体同事接收消息,向具体同事对象发出命令。
  • ConcreteColleague1 具体同事类,每个具体同事只知道自己的行为,而不了解其它同事类的情况,但他们却都认识中介者对象

三 C++代码实现

#include "pch.h"
#include <iostream>
#include <string>
using namespace std;

class UnitedNations;

//抽象的国家类 相当于Colleague
class Country

public:
    Country(UnitedNations* mediator)
    
        this->m_mediator = mediator;
    
protected:
    UnitedNations* m_mediator;
;

//联合国类 相当于Mediator类
class UnitedNations

public:
    //定义一个抽象的发送消息方法,得到同事对象和发送信息
    virtual void Declare(string message, Country* colleague) = 0;
;

//美国类 相当于ConcreteColleague1类
class USA : public Country

public:
    USA(UnitedNations* mediator) : Country(mediator)
    

    
    //声明  发送信息通常是中介者发送出去的
    void Declare(string message)
    
        this->m_mediator->Declare(message, this);
        
    
    void GetMessage(string message)
    
        cout << "美国获得对方信息: " << message << endl;
    
;

//伊拉克类 
class Iraq : public Country

public:
    Iraq(UnitedNations* mediator) : Country(mediator)
    

    
    //声明  发送信息通常是中介者发送出去的
    void Declare(string message)
    
        this->m_mediator->Declare(message, this);
    
    void GetMessage(string message)
    
        cout << "伊拉克获得对方信息: " << message << endl;
    
;

//联合国安全理事会 
//ConcreteMediator 具体中介者对象,实现抽象类的方法,它需要知道
//所有具体同事类,并从具体同事接收消息,向具体同事对象发出命令
class UnitedNationsSecurityCouncil : public UnitedNations

public:
    void SetUSAColleague(USA* colleague1)
    
        this->m_colleague1 = colleague1;
    
    void SetIraqColleague(Iraq* colleague2)
    
        this->m_colleague2 = colleague2;
    
    void Declare(string message, Country* colleague) override
    
        if (colleague == this->m_colleague1)
        
            cout << colleague << ' '<< this->m_colleague1 << endl;
            this->m_colleague2->GetMessage(message);
        
        else
        
            this->m_colleague1->GetMessage(message);
        
    
private:
    USA* m_colleague1;  //它需要知道所有具体同事类
    Iraq* m_colleague2;
;

int main()

    UnitedNationsSecurityCouncil* UNSC = new UnitedNationsSecurityCouncil();
    USA* c1 = new USA(UNSC);
    Iraq* c2 = new Iraq(UNSC);

    UNSC->SetUSAColleague(c1);
    UNSC->SetIraqColleague(c2);

    c1->Declare("不准研制核武器,否则要发动战争");
    c2->Declare("我们没有核武器,也不怕侵略战争!");

    return 0;

以上是关于中介者模式的主要内容,如果未能解决你的问题,请参考以下文章

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

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

中介者模式

中介者模式(Mediator Pattern)

手撸golang 行为型设计模式 中介者模式

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