Decorator は、 構造に関するパターンのひとつで、 オブジェクトをデコレーターと呼ばれる特別なラッパー・オブジェクト内に配置することにより、 新しい振る舞いを動的に追加できます。
対象のオブジェクトとデコレーターは同じインターフェースに従うため、 デコレーターを使うと、 オブジェクトを何重にも包み込むことができます。 その結果として生成されるオブジェクトは、 全部のラッパーの振る舞いを集積した振る舞いをします。
概念的な例
pizza.go: コンポーネントのインターフェース
veggieMania.go: 具象コンポーネント
tomatoTopping.go: 具象デコレーター
cheeseTopping.go: 具象デコレーター
main.go: クライアント・コード
output.txt: 実行結果