Swift 디자인패턴 Mediator Pattern (중재자 패턴)
Mediator Pattern은 객체 간의 복잡한 의사소통을 캡슐화하는 행동 패턴
히스토리
- 2022-06-15: 디자인 패턴 스터디 정리
- 2024-11-26: 포스팅 글 재정리 및 예제 변경
Mediator Pattern
객체들이 직접 상호작용하지 않고, 중재자(Mediator)를 통해서만 소통하도록 설계.
- 객체 간의 강한 결합을 줄이고 코드의 유연성을 높일 수 있음
중재자 패턴은 일반적으로 4가지 개념으로 구성
- Colleague: 의사소통에 참여하는 객체로, 각 동료는 Mediator를 통해 간접적으로 소통
- Colleague Protocol: Colleague들이 구현해야 하는 메서드와 속성을 정의
- Mediator: Colleague 간의 의사소통을 조율하며, 각 동료 객체는 Mediator 객체에 대한 참조를 가짐
- Mediator Protocol: Mediator가 구현해야 하는 메서드와 속성을 정의
중재자 패턴 적용을 고려할 수 있는 상황
- 객체 간의 복잡한 의존성을 줄이고 싶을 때
- 객체들이 서로의 상태에 영향을 미치며 이벤트를 생성하거나 반응할 때
코드 예제
이벤트를 서로가 서로에게만 전달하는 구조
import SwiftUI
protocol MediatorProtocol: AnyObject {
func send(message: String, from colleague: Colleague)
}
class Mediator: MediatorProtocol {
private var colleagues: [Colleague] = []
func register(colleague: Colleague) {
colleagues.append(colleague)
}
func send(message: String, from colleague: Colleague) {
for receiver in colleagues where receiver !== colleague {
receiver.receive(message: message)
}
}
}
class Colleague {
let name: String
private weak var mediator: MediatorProtocol?
init(name: String, mediator: MediatorProtocol) {
self.name = name
self.mediator = mediator
}
func send(message: String) {
print("\(name) sends message: \(message)")
mediator?.send(message: message, from: self)
}
func receive(message: String) {
print("\(name) received message: \(message)")
}
}
private struct ContentView: View {
var body: some View {
Button("Execute") {
// 사용 예시
let mediator = Mediator()
let colleague1 = Colleague(name: "Alice", mediator: mediator)
let colleague2 = Colleague(name: "Bob", mediator: mediator)
mediator.register(colleague: colleague1)
mediator.register(colleague: colleague2)
colleague1.send(message: "Hello, Bob!")
colleague2.send(message: "Hi, Alice!")
}
}
}
#Preview {
ContentView()
}
(참고)
https://www.raywenderlich.com/books/design-patterns-by-tutorials/v3.0/chapters/19-mediator-pattern
Design Patterns by Tutorials, Chapter 19: Mediator Pattern
This is a behavioral design pattern that encapsulates how objects, called colleagues for this pattern, communicate with one another. This pattern is useful to separate interactions between colleagues into an object, the mediator. Learn how to use it when y
www.kodeco.com:443
https://refactoring.guru/ko/design-patterns/mediator
'apple > DesignPattern, Architecture' 카테고리의 다른 글
Swift 디자인패턴 Chain-of-Responsibility Pattern (책임 연쇄 패턴) (0) | 2022.07.05 |
---|---|
Swift 디자인패턴 Composite Pattern (복합체 패턴) (1) | 2022.06.15 |
Swift 디자인패턴 FlyWeight Pattern (플라이웨이트 패턴) (1) | 2022.06.09 |
Swift 디자인패턴 Facade Pattern (퍼사드 패턴) (1) | 2022.06.07 |
Swift 디자인패턴 Multicast Delegate Pattern (멀티캐스트 딜리게이트 패턴) (0) | 2022.06.07 |