#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パターン]]