簡體   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