はなちるのマイノート

Unityをメインとした技術ブログ。自分らしくまったりやっていきたいと思いますー!

【Unity】FacadeパターンとMediatorパターンの違いと使い分けについて

はじめに

今回はFacadeパターンとMediatorパターンの違いについて考えた後、それぞれの使い分けについて考えてみたいと思います。

しかし私自身まだ習いたてなので、間違っている情報を書いてしまっている可能性があります。

注意してください。

2つの違いを一言で

FacadeパターンMediatorパターンの違いを一言で表すと

Mediatorは双方向にやり取りをするが,Facadeは一方向にやり取りをする

でしょう。

Unityでの実装例

Facade

github.com

f:id:hanaaaaaachiru:20201106171641p:plain
Facadeパターンのクラス図

Facade パターン - Wikipedia

Mediator

github.com

f:id:hanaaaaaachiru:20201106172715p:plain
Mediatorパターンのクラス図

もう少し深掘りに

Facadeパターンはインターフェイス(API)を少なくすることが目的です。

ここでいうインターフェイスとはC#interfaceではなく、外部から使うことのできるものという意味であることに注意してください。

ということでFacadeのサブシステム同士が疎結合であろうと密結合であろうと関係はなく、複数のサブシステムを一つのシステムにまとめて提供をすることが本質です。

対してMediatorパターンも利用者(ConcreteMediatorのインスタンスを利用する者)にとっては複数のサブシステムを一つのシステムにまとめて提供されているようにしか見えません。

では実際に複数のサブシステムをまとめるときにFacadeパターンとMediatorパターンのどちらを使えばよいかというと、以下のように考えられるのではないでしょうか。

  • サブシステム同士に直接的な関係性が薄いときにFacade
  • サブシステムが密結合しているときはMediator

Mediatorパターンはメンバー(サブシステム)はみんなMediatorにだけ報告し,メンバーへの指示はMediatorのみから来るようにするという考えです。

なのでメンバ同士が密結合であればあるほど効果を発揮することができるはずです。

対してFacadeはサブシステム同士が密結合であっても放置しているだけなので、中身が複雑化してしまう傾向があります。

逆にサブシステム同士が既にシンプルな関係性にあれば、相談役(Mediator)を立てなくても良いのではないでしょうか。