今回はMediatorパターンについて書いていきます。
デザインパターンとは
デザインパターンとはソフトウェア開発の設計方法の事です。
『オブジェクト指向における再利用のためのデザインパターン』という本が出典で、全部で23種類のパターンが紹介されています。
Mediatorパターンとは
Mediatorパターンとはオブジェクト同士のメッセージのやり取りに関するデザインパターンです。
先日勉強したObserberパターンと近いものになります。
このデザインパターンではMediatorとColleagueいうクラスが登場します。
Colleagueが複数存在し、Mediatorは全てのColleagueの参照を持っています。
そしてあるColleagueから他のColleagueへのメッセージ送信は全てMediatorを経由するようになります。
これによって柔軟性は欠けますがメッセージのやりとりをシンプルにする事ができます。
SwiftでのMediatorパターンの実装方法
SwiftでのMediatorパターンは下のように実装します。
Colleague
が3つあり、それらの仲介役のMediator
が1つ存在します。
protocol Mediator { func run() } class ConcreteMediator: Mediator { var colleagues: [Colleague] = [] func addColleague(colleague: Colleague) { colleagues.append(colleague) } func run() { for colleague in colleagues { colleague.runForMediator() } } } class Colleague { weak var mediator: ConcreteMediator? = nil init(mediator: ConcreteMediator) { self.mediator = mediator mediator.addColleague(self) } func run() {} func runForMediator() {} } class ConcreteColleague1: Colleague { override func run() { print("その1を実行") mediator?.run() } override func runForMediator() { print("その1が呼ばれた") } } class ConcreteColleague2: Colleague { override func run() { print("その2を実行") mediator?.run() } override func runForMediator() { print("その2が呼ばれた") } } class ConcreteColleague3: Colleague { override func run() { print("その3を実行") mediator?.run() } override func runForMediator() { print("その3が呼ばれた") } } let mediator = ConcreteMediator() let colleague1 = ConcreteColleague1(mediator: mediator) let colleague2 = ConcreteColleague2(mediator: mediator) let colleague3 = ConcreteColleague3(mediator: mediator) colleague1.run() colleague2.run() colleague3.run()
- 作者: エリックガンマ,ラルフジョンソン,リチャードヘルム,ジョンブリシディース,Erich Gamma,Ralph Johnson,Richard Helm,John Vlissides,本位田真一,吉田和樹
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 1999/10
- メディア: 単行本
- 購入: 21人 クリック: 711回
- この商品を含むブログ (210件) を見る