Mediator设计模式作为测试系统

时间:2015-04-07 17:52:42

标签: java design-patterns mediator

这里我们实现了中介设计模式Mediator uml

目标是创建一个工作/有用的Mediator模式实例,代码工作正常。问题是这是对模式的恰当使用,是否正确执行?

1 个答案:

答案 0 :(得分:0)

我经常使用中介,但在qt中使用c ++。不过我觉得这没关系。所以我可以告诉你一些事情。

我认为你的榜样很好。通常连接如

  

对象--->调解员---->对象

调解员应继承Abstrac Mediator的形式。 Abstrac中介提供界面。 Mediator也应该有向量或列出所有要发送的对象(指针)并获取数据beetwen as。我想从我的调解员那里显示我的头文件。

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

如您所见,您还需要创建类Object。对象是sepcjal类为concret对象提供的接口,每个whant都要加入到mediator列表中。这个模式非常有效。

我还介绍了GlobalMEdiator。这有点像网络简单介体有些像LAN,而GlobalMediator有点像WAN。在您的示例中,如果未找到Local mediator对象,则GlobalMediator会工作。然后,本地中介向GlobalMediator发送消息,并将消息发送给其列表中的每个LocalMediator。假设A_Local_Mediator让所有学生和老师都在一个班级。 B_Local_Mediator有B级的所有学生和老师。当老师形成A级时,要从calss B发送信息给学生发送信息。在此代码中,GlobalMediator没有完全实现,如您所见。如果你知道我可以提供这个。在这一刻,我找到了唯一相同的概念。

  

TeacherA ---&gt; A_Local_Mediator(如果找到学生发送消息到学生   在同样的情况下,如果不是---&gt; Global_ Mediator ----&gt; B_Local_Mediator   (找学生)

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