[英]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.