Autumn SALE
중재자

C++로 작성된 중재자

중재자는 행동 디자인 패턴이며 프로그램의 컴포넌트들이 특수 중재자 객체를 통하여 간접적으로 소통하게 함으로써 해당 컴포넌트 간의 결합도를 줄입니다.

중재자는 개별 컴포넌트들을 편집, 확장 및 재사용하는 것을 쉽게 만드는데, 그 이유는 이들이 더 이상 수십 개의 다른 클래스들에 의존하지 않기 때문입니다.

복잡도:

인기도:

사용 사례들: C++ 코드에서 중재자 패턴의 가장 인기 있는 사용 용도는 앱의 그래픽 사용자 인터페이스 컴포넌트 간의 통신을 쉽게 하는 것입니다. MVC 패턴의 컨트롤러 부분의 동의어는 중재자입니다.

개념적인 예시

이 예시는 중재자의 구조를 보여주고 다음 질문에 중점을 둡니다:

  • 패턴은 어떤 클래스들로 구성되어 있나요?
  • 이 클래스들은 어떤 역할을 하나요?
  • 패턴의 요소들은 어떻게 서로 연관되어 있나요?

main.cc: 개념적인 예시

 #include <iostream> #include <string> /** * The Mediator interface declares a method used by components to notify the * mediator about various events. The Mediator may react to these events and * pass the execution to other components. */ class BaseComponent; class Mediator { public: virtual void Notify(BaseComponent *sender, std::string event) const = 0; }; /** * The Base Component provides the basic functionality of storing a mediator's * instance inside component objects. */ class BaseComponent { protected: Mediator *mediator_; public: BaseComponent(Mediator *mediator = nullptr) : mediator_(mediator) { } void set_mediator(Mediator *mediator) { this->mediator_ = mediator; } }; /** * Concrete Components implement various functionality. They don't depend on * other components. They also don't depend on any concrete mediator classes. */ class Component1 : public BaseComponent { public: void DoA() { std::cout << "Component 1 does A.\n"; this->mediator_->Notify(this, "A"); } void DoB() { std::cout << "Component 1 does B.\n"; this->mediator_->Notify(this, "B"); } }; class Component2 : public BaseComponent { public: void DoC() { std::cout << "Component 2 does C.\n"; this->mediator_->Notify(this, "C"); } void DoD() { std::cout << "Component 2 does D.\n"; this->mediator_->Notify(this, "D"); } }; /** * Concrete Mediators implement cooperative behavior by coordinating several * components. */ class ConcreteMediator : public Mediator { private: Component1 *component1_; Component2 *component2_; public: ConcreteMediator(Component1 *c1, Component2 *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 D and triggers following operations:\n"; this->component1_->DoB(); this->component2_->DoC(); } } }; /** * The client code. */ void ClientCode() { Component1 *c1 = new Component1; Component2 *c2 = new Component2; ConcreteMediator *mediator = new ConcreteMediator(c1, c2); std::cout << "Client triggers operation A.\n"; c1->DoA(); std::cout << "\n"; std::cout << "Client triggers operation D.\n"; c2->DoD(); delete c1; delete c2; delete mediator; } int main() { ClientCode(); return 0; } 

Output.txt: 실행 결과

Client triggers operation A. Component 1 does A. Mediator reacts on A and triggers following operations: Component 2 does C. Client triggers operation D. Component 2 does D. Mediator reacts on D and triggers following operations: Component 1 does B. Component 2 does C. 

다른 언어로 작성된 중재자

C#으로 작성된 중재자 Go로 작성된 중재자 자바로 작성된 중재자 PHP로 작성된 중재자 파이썬으로 작성된 중재자 루비로 작성된 중재자 러스트로 작성된 중재자 스위프트로 작성된 중재자 타입스크립트로 작성된 중재자