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