デコレーターパターン
Gofデザインパターンの一つ、デコレーターパターンについて復習します。
デコレーターパターンは比較的簡単で、デザインパターンの中で一番最初に覚えたパターンでした。
再利用しやすいコードを書く上で今でも欠かせないパターンだと思います。
デコレーターパターンとは
・デコレーターを日本語に訳すと「装飾者」
・ある型に対する拡張機能を同じ型で実装する
デコレーターパターンの構成
拡張する型の宣言
・デコレーターパターンで拡張機能を実装する型の宣言
・抽象クラスでも書けるがインターフェースの使用を推奨
public interface ISample { void doSomething(); }
装飾するクラス(デコレーター)
・デコレーターパターンで実装されたクラス
・コンストラクタで拡張する型を受け取る
・自身も拡張する型を実装する
public sealed class SampleDecorator : ISample { public SampleDecorator(ISample decorated) { // 省略 } public void doSomething() { // 省略 } }
装飾されるクラス
・デコレーターのコンストラクタに渡されるクラス
・拡張対象の型を実装している
・デコレーター自身がデコレーターに渡されることもある
public sealed class Sample : ISample { public void doSomething() { // 省略 } }
使用例
class Program { static void Main(string[] args) { new Sample().doSomething(); new SampleDecorator(new Sample()).doSomething(); new SampleDecorator(new SampleDecorator(new Sample())).doSomething(); } }
デコレーターパターンのメリット
・既存のコードを変更せずに機能を追加することが出来る
・オープン・クローズドの原則の実現方法の一つ(拡張に対して開いていて、修正に対して閉じている)
・デコレーターを組み合わせ方を変えるだけで安全に機能のバリエーションを増やすことが出来る