简介
中介者模式:
用一个中介对象封装一系列的对象交互。中介者使各对象不需要显式的相互引用,从而使其耦合松散,而且了以独立的改变他们之间的交互。
组成对象
Mediator抽象中介者角色,定义统一接口,用于各个同事角色之间的通信
ConcreteMediator具体中介者角色,通过协调各个同事角色实现协作行为,依赖于各个同事
Colleague同事角色,每个同事角色都应该知道中介的存在,且同事间通信一定是通过中介协作;同事行为分:自发行为,依赖行为。
常用的场景
简单但是不容易使用的一个模式。把握一个准则:当类图中出现蜘蛛网时,尝试使用中介者
实际应用:机场调度中心,MVC框架中的C(Controller),媒体网关,中介服务
优点:
减少类间依赖,把一对多的依赖转变成一对一。同事类只依赖中介,降低类间耦合
缺点:
中介者会随着同事类的增多,逻辑越来越复杂
测试代码
#include <iostream>
#include <assert.h>
#include <vector>
using namespace std;
#include <string>
#include <list>
class FBaseColleague;
class FBaseMediator
{
public:
virtual void sendMessage(FBaseColleague* pMessage, string message) = 0;
};
class FBaseColleague
{
public:
FBaseColleague( FBaseMediator* mediator )
{
m_pMediator = mediator;
};
~FBaseColleague(){};
private:
FBaseMediator* m_pMediator;
};
class FMediator
{
public:
FBaseColleague* m_pAColleague;
FBaseColleague* m_pBColleague;
void sendMessage( FBaseColleague* pMessage, string message ){};
};
class FColleagueA : public FBaseColleague
{
public:
void sendMessage(FBaseColleague* pMessage, string message){};
};
class FColleagueB : public FBaseColleague
{
public:
void sendMessage(FBaseColleague* pMessage, string message){};
};
void main()
{
}