#include <string> class BaseComponent; class Mediator { public: virtual void Notify(BaseComponent *sender, std::string event) const = 0; };So let's create our **BaseComponent**
#include <string> class BaseComponent; class Mediator { public: virtual void Notify(BaseComponent *sender, std::string event) const = 0; };Concrete Components implement various functionality. They don't depend on other components. They also don't depend on any concrete mediator classes. Let's create a couple of Components. We will name the FirstComponent and SecondComponent. Let's start with the FirstComponent.
#include <iostream> #include "BaseComponent.h" class FirstComponent : public BaseComponent { public: void DoAction() { std::cout << "The First Component does Action.\n"; this->mediator_->Notify(this, "Action"); } void DoB() { std::cout << "The First Component does B.\n"; this->mediator_->Notify(this, "B"); } };
Let create the SecondComponent. It's code will be:
#include <iostream> #include "BaseComponent.h" class SecondComponent : public BaseComponent { public: void DoC() { std::cout << "The Second Component does C.\n"; this->mediator_->Notify(this, "C"); } void DoD() { std::cout << "The Second Component does Deed.\n"; this->mediator_->Notify(this, "D"); } };We also need a ConcreteMediator.
#include "FirstComponent.h" #include "SecondComponent.h" class ConcreteMediator : public Mediator { private: FirstComponent *component1_; SecondComponent *component2_; public: ConcreteMediator(FirstComponent *c1, SecondComponent *c2) : component1_(c1), component2_(c2) { this->component1_->set_mediator(this); this->component2_->set_mediator(this); } void Notify(BaseComponent *sender, std::string event) const override { if (event == "A") { std::cout << "Mediator reacts on A and triggers following operations:\n"; this->component2_->DoC(); } if (event == "D") { std::cout << "Mediator reacts on the Deed and triggers following operations:\n"; this->component1_->DoB(); this->component2_->DoC(); } } };and lasly we go to the main.cpp and add some client code.
#include "ConcreteMediator.h" void ClientCode() { FirstComponent *c1 = new FirstComponent; SecondComponent *c2 = new SecondComponent; ConcreteMediator *mediator = new ConcreteMediator(c1, c2); std::cout << "Client triggers operation A.\n"; c1->DoAction(); std::cout << "\n"; std::cout << "Client triggers operation D.\n"; c2->DoD(); delete c1; delete c2; delete mediator; }Lastly we put the ClientCode in the main method...
int main() { ClientCode(); return 0; }We then compile and run we should get:
Client triggers operation A. The First Component does Action. Client triggers operation D. The Second Component does Deed. Mediator reacts on the Deed and triggers following operations: The First Component does B. The Second Component does C.The Ray Code is AWESOME!!!
Find Ray on:
wikipedia
youtube
The Ray Code
Ray Andrade