繁体   English   中英

中介者设计模式作为测试系统

[英]Mediator Design pattern as a test system

这是我对中介器设计模式的实现 调解人

目标是创建介体模式的有效实例,代码可以正常工作。 问题是这是对模式的适当使用,并且执行正确吗?

我经常使用调解器,但在Qt的C ++中。 但是我的事情没关系。 所以我可以告诉你。

我认为您的榜样很好。 一般连接看起来像

对象--->中介者---->对象

调解员应继承Abstrac调解员的形式。 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

如您所见,您还需要创建类Object。 对象是Sepcjal类提供的接口,用于每个想加入中介者列表的具体对象。 此模式效果很好。

我还介绍了GlobalMEdiator。 这就像网络一样,Mediator就像LAN,GlobalMediator像WAN。 在您的示例中,如果找不到本地调解器,GlobalMediator会起作用。 然后,本地调解器向GlobalMediator发送消息,然后他向其列表中的每个LocalMediator发送消息。 假设A_Local_Mediator的所有学生和老师都在一个班级中。 B_Local_Mediator在B类中拥有所有的学生和老师。当A类教师希望从Calss B向学生发送信息时,将路由消息。 在此代码中,GlobalMediator尚未完全实现。 如果您愿意,我可以提供。 在这一刻,我发现了唯一相同的概念。

TeacherA ---> A_Local_Mediator(如果找到学生,则在相同的条件下向该学生发送消息---> Global_ Mediator ----> B_Local_Mediator(找到学生)

对于这个??? 在这种情况下,您具有管理介体和对象的非常简单的机制。 通常不需要小型项目GlobalMediator。 因此,您可以注释以下几行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM