Я использую посредник очень часто, но в C++ в qt. Однако я ничего не имею в виду. Поэтому я могу кое-что рассказать вам.
Я думаю, что ваш пример хорош. Generaly соединение, как внешний вид, как
объекта ---> Посредник ----> Объект
Посредник должен наследовать форму 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
Как вы видите, вам также необходимо создать объект класса. Объект - это класс sepcjal, предоставляющий интерфейс для конкретного объекта, каждый из которых хочет присоединиться к списку медиаторов. Этот патерн очень хорошо работает.
Я также представил GlobalMEdiator. Это нечто похожее на сеть. Посредник - это как LAN, а GlobalMediator - как WAN. В вашем примере GlobalMediator работал, если локальный посредник не нашел объект. Затем локальный посредник отправляет сообщение GlobalMediator, и он отправляет сообщение всем LocalMediator, которые у него есть в своем списке. Пусть говорят, что у A_Local_Mediator есть все ученики и преподаватели в одном классе. B_Local_Mediator имеют всех учеников и учителей в классе B. Когда преподаватель формирует класс A, который хочет отправить информацию студенту из calss, B mesage маршрутизируется. В этом коде GlobalMediator не реализован полностью, как вы видите. Если вы хотите, чтобы я это предоставил. В этот момент я нашел единственную концепцию.
TeacherA ---> A_Local_Mediator (если найти студента отправить в электронном письме студента в этом же Calss, если не ---> Global_ Посредник ----> B_Local_Mediator (найти студент)
Для чего это? В этом случае у вас есть очень простой механизм управления медиатором и объектом. Генерация в небольшом проекте GlobalMediator не требуется. Поэтому вы можете прокомментировать эти несколько строк.