【Unity】デザインパターン:Decoratorパターン
デコレーター(Decorator)とは? Decoratorパターンとは、既存のオブジェクトに対して、元の構造を変更せずに新しい機能を動的に追加するための
デザインパターンです。
「装飾」という名前の由来 このパターンが「装飾」と呼ばれる理由は、まさにクリスマスツリーの装飾と同じ考え方だからです。
基本のツリー(元のオブジェクト)はそのままに、オーナメントやライト(機能)を自由に追加・取り外しできます。
元のオブジェクトを「装飾」するように、新しい振る舞いを重ね合わせていくのが特徴です。
継承との違い 従来の継承を使った機能拡張では、以下のような問題があります:
継承の問題点:
クラスが増えすぎる(組み合わせ爆発) コンパイル時に機能が固定される 複数の機能を同時に適用するのが困難 Decoratorパターンの利点:
実行時に機能を追加・削除できる 複数のデコレータを自由に組み合わせ可能 既存コードの変更が不要 機能の組み合わせ順序も制御できる 基本構造 Decoratorパターンは以下の要素で構成されます:
Component(コンポーネント): 機能を定義するインターフェース ConcreteComponent(具体コンポーネント): 基本機能を実装するクラス Decorator(デコレータ基底クラス): 装飾機能の基底となるクラス ConcreteDecorator(具体デコレータ): 実際の装飾機能を実装するクラス 使用する場面 以下のような状況でDecoratorパターンが有効です:
動的な機能追加が必要: 実行時に機能のON/OFFを切り替えたい 機能の組み合わせ: 複数の効果を重ね合わせたい(攻撃力UP + 防御力UP など) 既存コードの保護: 動作中のコードを変更せずに機能を拡張したい 設定による制御: 設定ファイルやユーザー選択により機能を変更したい