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