## 8-6 構造の[[🗃️オブジェクト]]間にあるもの ### [[🗃️Proxyパターン]] - 同じ型の[[🗃️オブジェクト]]の数珠つなぎ(バケツリレー)でふるまいの内容を変更するアイディア。 - 例 - mailerとloggerの関係 - mailerとloggerが渡された[[🗃️Proxyパターン]]の[[🗃️クラス]] - mailer部分はいじらずに、ロギングの処理を追加することができる ### [[🗃️Decoratorパターン]] - [[🗃️Proxyパターン]]が、利用者から見たメソッドの使い方を拡張するラッパーである - [[🗃️Decoratorパターン]]は、既存のふるまいはそのままにして、新たなメソッドを拡張するパターン。 - [[🗃️特異クラス(Ruby)]]は、[[🗃️Decoratorパターン]]の言語機能バージョン。 - [[🗃️Proxyパターン]]と混合されやすい。 - [[🗃️Proxyパターン]]なのに、メソッドを増やしたり、[[🗃️単一責任原則(SRP)]]を逸脱してしまいがちなので、注意。 ### [[🗃️Adapterパターン]] - Adapterの実体(サードパーティライブラリなど)は、依存関係の最下層に位置するようになる。 - → 実体は、[[🗃️インフラストラクチャ層]]になる。 - [[🗃️Adapterパターン]]は、素直な変換ができているかに責務を持つ。 - 手前処理を[[🗃️スタブ]]を使ってテストするとよい - [[🗃️ORM]]のような、比較的外側の層で、安定度が高い[[🗃️フレームワーク]]であれば、より低いレイヤーの固有技術との[[🗃️Adapterパターン]]として使える。