调解器设计模式作为测试系统
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。所以你可以评论这几行。
这里是我对中介设计模式的实现
目标是创建中介模式的 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。所以你可以评论这几行。