Mediator 패턴 개념
여러 객체 간의 통신을 관리하고, 각 객체가 서로 직접 참조하지 않고 중재자를 통해 통신할 수 있게 해주는 디자인 패턴. 통신 시스템에 적용하면, 모듈 간의 복잡한 상호작용을 단순화하고, 시스템의 결합도를 낮출 수 임.
Mediator 구성 요소
- Mediator(중재자): 여러 객체 간의 통신을 중재하고 조율하는 객체.
- Colleague(동료): Mediator를 통해 다른 객체와 상호작용하는 객체.
C++ 코드
Mediator 인터페이스 정의
class Colleague;
class Mediator {
public:
virtual void sendMessage(const std::string &message, Colleague *colleague) = 0;
virtual void registerColleague(Colleague *colleague) = 0;
};
Colleage 클래스 정의
class Colleague {
protected:
Mediator *mediator;
public:
Colleague(Mediator *m) : mediator(m) {}
virtual void receiveMessage(const std::string &message) = 0;
};
Concrete Mediator 및 Concreate Colleague 구현
#include <vector>
#include <iostream>
class ConcreteMediator : public Mediator {
private:
std::vector<Colleague*> colleagues;
public:
void sendMessage(const std::string &message, Colleague *sender) override {
for (auto colleague : colleagues) {
if (colleague != sender) {
colleague->receiveMessage(message);
}
}
}
void registerColleague(Colleague *colleague) override {
colleagues.push_back(colleague);
}
};
class ConcreteColleague : public Colleague {
public:
ConcreteColleague(Mediator *m) : Colleague(m) {}
void receiveMessage(const std::string &message) override {
std::cout << "Colleague received: " << message << std::endl;
}
void send(const std::string &message) {
mediator->sendMessage(message, this);
}
};
사용 예제
int main() {
ConcreteMediator mediator;
ConcreteColleague colleague1(&mediator);
ConcreteColleague colleague2(&mediator);
mediator.registerColleague(&colleague1);
mediator.registerColleague(&colleague2);
colleague1.send("Hello from colleague 1");
colleague2.send("Hello from colleague 2");
return 0;
}
'Program > SW Design Patterns' 카테고리의 다른 글
CH8 스테이트 패턴 (0) | 2023.12.04 |
---|---|
CH7 어댑터&퍼사드 패턴 (0) | 2023.03.19 |
CH6 커맨드 패턴 (0) | 2023.03.07 |
CH5 데코레이터 패턴 (1) | 2023.03.05 |
CH4 팩토리 패턴 (0) | 2023.03.04 |