*目次 [#eb1d8a86] #contents *Decoratorパターン [#g4371eb9] -オブジェクトに付加的な責務を動的に付与する。デコレータはサブクラス化の代替となる、柔軟な機能拡張手段を提供する。 -Decoratorパターンは具象コンポーネントをラップする使用するデコレータクラス群を必要とする。 *構造 [#y97cfc99] -デコレータクラスは装飾するコンポーネントの型と同じ型である。 --実際には継承かインタフェース実装のどちらかを使って、装飾するコンポーネントと同じ型になる。 -デコレータはコンポーネントへのメソッド呼び出しの前後どちらかまたは両方に(またはメソッド呼び出しの代わりに)新しい機能を追加することで、コンポーネントの振る舞いを変更する。 -コンポーネントは任意の数のデコレータでラップできる。」 -一般にデコレータはコンポーネントのクライアントに対して透過的である。クライアントがコンポーネントの具象型に依存していない限りはそうなる。 *デメリット [#h416507c] -通常はデコレータを透過的に挿入でき、クライアントはデコレータを扱っていることをまったく知る必要はない。 --それにもかかわらず、コードの中には特定の型に依存しているものもあり、それにデコレータを挿入してしまうと問題が起きてしまう。 -デコレータにより最終的に設計に多数の小さなオブジェクトができる可能性があり、乱用すると複雑になる可能性がある。 *参考文献 [#h802158b] -『Head Firstデザインパターン』