デコレーターパターン
GoFの構造パターン。オブジェクトをラップして、元のクラスを変更せずに機能を追加する。
古典的な例は BufferedReader(FileReader(...)) で、ラッパーごとに振る舞い(バッファ読み込み、gzip、暗号化)が加わる。Pythonの @decorator 構文は、同じ発想を定義時に適用する言語レベルのサポートだ。
実行時に機能を組み合わせたい場合は継承より優れている。リスクは、ラップの階層が深くなるとデバッグしづらいことだ。最適な用途はI/Oストリーム、ミドルウェアスタック(Express、ASP.NET)、AOPである。