简体   繁体   English

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

[英]Mediator Design pattern as a test system

Here we have my implementation of the mediator design pattern 这是我对中介器设计模式的实现 调解人

The Goal is to create a working/useful instance of the Mediator pattern, the code works fine. 目标是创建介体模式的有效实例,代码可以正常工作。 The question is this an appropriate use of the pattern, and was it executed correctly? 问题是这是对模式的适当使用,并且执行正确吗?

I using mediator very often but in c++ in qt. 我经常使用调解器,但在Qt的C ++中。 However I thing this is does not matter. 但是我的事情没关系。 So I can something tell you. 所以我可以告诉你。

I think that your example is good. 我认为您的榜样很好。 Generaly connection as look like 一般连接看起来像

Object ---> Mediator ----> Object 对象--->中介者---->对象

Mediator should inherit form Abstrac Mediator. 调解员应继承Abstrac调解员的形式。 Abstrac mediator provide interface. Abstrac介体提供接口。 Mediator also should have vector or list all object (pointer) who whant to send and get data beetwen as. 介体还应该具有向量或列出希望发送和获取数据的所有对象(指针)。 I whant to show my header file from my mediator. 我希望显示来自调解员的头文件。

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

As You see you also need create class Object. 如您所见,您还需要创建类Object。 Object is sepcjal class provided interface for concret object each whant to join to mediator list. 对象是Sepcjal类提供的接口,用于每个想加入中介者列表的具体对象。 This patern works very well. 此模式效果很好。

I also introduced GlobalMEdiator. 我还介绍了GlobalMEdiator。 This is some like network simply Mediator is some like LAN, and GlobalMediator is some like WAN. 这就像网络一样,Mediator就像LAN,GlobalMediator像WAN。 In your example GlobalMediator worked if Local mediator not found object. 在您的示例中,如果找不到本地调解器,GlobalMediator会起作用。 Then Local mediator send message to GlobalMediator and he send message to all LocalMediator each he have in its List. 然后,本地调解器向GlobalMediator发送消息,然后他向其列表中的每个LocalMediator发送消息。 Let say A_Local_Mediator have all student and teacher in one class. 假设A_Local_Mediator的所有学生和老师都在一个班级中。 B_Local_Mediator have all studdent and teacher in class B. When teacher form class A whant to send info to student from calss B mesage is routed. B_Local_Mediator在B类中拥有所有的学生和老师。当A类教师希望从Calss B向学生发送信息时,将路由消息。 In this code GlobalMediator not have full implemented as you see. 在此代码中,GlobalMediator尚未完全实现。 If you whant that I can provided this. 如果您愿意,我可以提供。 In this moment I found the only same conception. 在这一刻,我发现了唯一相同的概念。

TeacherA ---> A_Local_Mediator (if find student send mesage to student in this same calss if not ---> Global_ Mediator---->B_Local_Mediator (find student) TeacherA ---> A_Local_Mediator(如果找到学生,则在相同的条件下向该学生发送消息---> Global_ Mediator ----> B_Local_Mediator(找到学生)

For what this ??? 对于这个??? In this case your have very simply mechanism to managment Mediator and Object. 在这种情况下,您具有管理介体和对象的非常简单的机制。 Generaly in small project GlobalMediator is not needed. 通常不需要小型项目GlobalMediator。 So you can comment this few lines. 因此,您可以注释以下几行。

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

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