デコレータパターンとは?
でこれーたーぱたーん
デコレータパターンとは、既存のオブジェクトに動的に機能を追加するデザインパターンで、継承を使わずに振る舞いを拡張できます。
デコレータパターン(Decorator Pattern)とは、オブジェクト指向設計における代表的なデザインパターンの一つです。既存のクラスを変更せずに、オブジェクトを別のオブジェクトで「包む(ラップする)」ことによって、動的に機能を追加・拡張する手法です。GoF(Gang of Four)によるデザインパターンの「構造パターン」に分類されます。
通常、機能の拡張には継承(サブクラス化)が使われますが、継承では組み合わせのたびにクラスが増えてしまい、管理が複雑になります。デコレータパターンでは、元のオブジェクトと同じインターフェースを実装した「デコレータ」クラスが元のオブジェクトを内包し、処理の前後に追加の処理を差し込む構造をとります。複数のデコレータを入れ子にすることで、さまざまな機能を柔軟に組み合わせることができます。
デコレータパターンが有効な場面の例は次のとおりです。
- ログ出力・認証・キャッシュなど横断的な処理を後付けで加えたい場合
- 組み合わせによって多様な振る舞いが必要で、継承だとクラスが膨大になる場合
- 実行時に動的に機能を追加・取り外しする必要がある場合
Pythonでは言語仕様として「デコレータ」(@記法)がサポートされており、関数やクラスにラッパーを適用する仕組みはデコレータパターンの考え方に基づいています。JavaのI/Oストリームクラス群もこのパターンの典型例です。
使い方・例文
Pythonで関数に @login_required や @cache などのデコレータを付けることで、元の関数を変更せずに認証やキャッシュの機能を追加するのが、デコレータパターンの典型的な使用例です。
この用語をシェア
最終更新: