中介者模式
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;
以上是关于中介者模式的主要内容,如果未能解决你的问题,请参考以下文章