调解器设计模式作为测试系统

Mediator Design pattern as a test system

这里是我对中介设计模式的实现

目标是创建中介模式的 working/useful 实例,代码运行良好。问题是这是对该模式的适当使用,它是否正确执行?

我经常使用调解器,但在 qt 中使用 C++。但是我认为这无关紧要。所以我可以告诉你一些事情。

我觉得你的例子很好。一般连接看起来像

Object ---> Mediator ----> Object

Mediator 应继承自 Abstrac Mediator。 Abstrac 中介提供接口。中介者还应该有向量或列出所有想要发送和获取数据的对象(指针)。我想显示我的调解员提供的头文件。

class Object;
class GlobalMediator;
class Mediator;

class IMediator
{
public: 
    virtual void Send(QString from , QString to, QString message) = 0;
    virtual void Send(QString from , QString to, QString parametr , QString message) = 0;
    virtual void Send(QString from , QString to , QGraphicsItem *item) = 0;
    virtual void Send(QString from , QString to , QString message , QVector<QString> vect) = 0;

//    virtual void SendFromOut(QString from , QString to, QString message) = 0;
};

class Mediator :  public QObject , public IMediator
{
    Q_OBJECT
private:
    QMap<QString ,Object* > map;
    GlobalMediator *gMed;
    QString name;

public:
    Mediator(QString name);
    QString getName();
    void Register(Object* obj);
    void Unregister(QString name );
    void setGlobalMediator(GlobalMediator *gm);

    void Send(QString from , QString to,  QString message);
    void Send(QString from , QString to, QString parametr , QString message);
    void Send(QString from , QString to , QGraphicsItem *item);
    void Send(QString from , QString to , QString message , QVector<QString> vect);



};

class GlobalMediator
{
private:
    QMap<QString , Mediator*> map;
public:
    GlobalMediator();
    void RegisterMediator(Mediator *med);
    void UnregisterMediator(Mediator *med);
\

};



class Object
{
//    Q_OBJECT


public:
    Object(Mediator *medium , QString name);
    Object(QString name);

private:
    Mediator *medium;

protected:
    QString name;

public: //others
    void AddMediator(Mediator *med);
    Mediator* getMediator();
    QString _name();

public:
    virtual void Send(QString to , QString message);
    virtual void Send(QString to, QString parametr , QString message);
    virtual void Send(QString to, QGraphicsItem *item);
    virtual void Send(QString to , QString message , QVector<QString> vect);

    virtual void Receive(QString from, QString message);
    virtual void Receive(QString from, QString parametr , QString message);
    virtual void Receive(QString from, QGraphicsItem *item);
    virtual void Receive(QString from , QString message , QVector<QString> vect);

};

#endif // MEDIATOR_H

如您所见,您还需要创建 class 对象。对象是 sepcjal class 为每个想要加入中介列表的具体对象提供接口。这个模式很好用。

我还介绍了GlobalMEdiator。这有点像网络,简单地说Mediator有点像LAN,而GlobalMediator有点像WAN。在您的示例中,如果本地调解器未找到对象,则 GlobalMediator 会工作。然后 Local mediator 向 GlobalMediator 发送消息,然后他向 List 中的所有 LocalMediator 发送消息。假设 A_Local_Mediator 所有的学生和老师合而为一 class。 B_Local_Mediator 所有的学生和老师都在 class B 中。当老师表单 class A 想要从 cals B 消息发送给学生的消息被路由时。在此代码中,GlobalMediator 并未如您所见完全实现。如果你想要我可以提供这个。在这一刻,我找到了唯一相同的概念。

TeacherA ---> A_Local_Mediator (if find student send mesage to student in this same calss if not ---> Global_ Mediator---->B_Local_Mediator (find student)

这是为了什么???在这种情况下,您可以使用非常简单的机制来管理 Mediator 和 Object。通常在小项目中不需要 GlobalMediator。所以你可以评论这几行。