はじめに
今回はFacade
パターンとMediator
パターンの違いについて考えた後、それぞれの使い分けについて考えてみたいと思います。
しかし私自身まだ習いたてなので、間違っている情報を書いてしまっている可能性があります。
注意してください。
2つの違いを一言で
Facade
パターンとMediator
パターンの違いを一言で表すと
Mediatorは双方向にやり取りをするが,Facadeは一方向にやり取りをする
でしょう。
Unityでの実装例
もう少し深掘りに
Facade
パターンはインターフェイス(API)を少なくすることが目的です。
ここでいうインターフェイスとはC#
のinterface
ではなく、外部から使うことのできるものという意味であることに注意してください。
ということでFacade
のサブシステム同士が疎結合であろうと密結合であろうと関係はなく、複数のサブシステムを一つのシステムにまとめて提供をすることが本質です。
対してMediator
パターンも利用者(ConcreteMediator
のインスタンスを利用する者)にとっては複数のサブシステムを一つのシステムにまとめて提供されているようにしか見えません。
では実際に複数のサブシステムをまとめるときにFacade
パターンとMediator
パターンのどちらを使えばよいかというと、以下のように考えられるのではないでしょうか。
- サブシステム同士に直接的な関係性が薄いときにFacade
- サブシステムが密結合しているときはMediator
Mediator
パターンはメンバー(サブシステム)はみんなMediator
にだけ報告し,メンバーへの指示はMediator
のみから来るようにするという考えです。
なのでメンバ同士が密結合であればあるほど効果を発揮することができるはずです。
対してFacade
はサブシステム同士が密結合であっても放置しているだけなので、中身が複雑化してしまう傾向があります。
逆にサブシステム同士が既にシンプルな関係性にあれば、相談役(Mediator
)を立てなくても良いのではないでしょうか。