#Book
### 8-9 どこで生成されどこで振る舞うか
- [[🗃️デザインパターン]]には、「呼び出せるふるまい」だけをもつオブジェクトに関するパターンがある。
- 大きな違いはないが、着目すべきは、ふるまいを使う目的、構造的な関係、およびふるまいを誰が生成し管理するのか
## [[🗃️Strategyパターン]]
- ふるまいオブジェクトの代入によって、[[🗃️Template Methodパターン]]と同じことを実現する
- [[🗃️Template Methodパターン]]よりも[[🗃️Strategyパターン]]のほうが柔軟。
- 大きな[[🗃️クラス]]の拡張性を確保したいときは、[[🗃️Strategyパターン]]がよい
- [[🗃️Strategyパターン]]の弱点は、ふるまいが部外者である点
- protectedなプロパティを自由に参照できない
## [[🗃️Stateパターン]]
- スピードメーターの例
- display(出しているスピード によって色を決める処理)では、if文がない。
- SafeStateかDangerStateなのかはcurrentStateが判断する
- [[🗃️Strategyパターン]]との違い
- ふるまいを外部トリガーではなく、内部でいつのまにか起きている点
## [[🗃️Commandパターン]]
- 異なる関心を持つ複数の関係者が登場する。
- [[🗃️Commandパターン]]の目的は、[[🗃️オブジェクト]]とふるまいの詳細を分離し、疎結合にすること
- [[🗃️コマンド・クエリ分離原則(CQS)]]のコマンドと同じ意味になる。
- 💭コマンドというのは、値を返すものではなく、[[🗃️オブジェクト]]の状態を変化させるものを指すということだろうか。
## [[🗃️Observerパターン]]
- [[🗃️Commandパターン]]よりも[[🗃️結合度]]が弱い連携。
- [[🗃️Observerパターン]]に登場する主[[🗃️オブジェクト]]は、すでに独立して機能が完成している。
- それに対する追加的な拡張をするのが[[🗃️Observerパターン]]の目的。
- 例
- [[🗃️HTML]]の要素で起きるクリックやマウスホバーを[[🗃️JavaScript]]のイベントリスナーで監視して、副次的なエフェクトをかけるのは、[[🗃️Observerパターン]]の1種。
## [[🗃️Visitorパターン]]