Decoratorパターン

2020/09/04 06:50

GoFのデザインパターンの一つ、Decoratorパターンについて動画でわかりやすく解説しています。コンポジションを利用して継承よりも柔軟な拡張ができる事をコードを見ながら確認できます。拡張用パーツを用意しておいてそれを付けたり外したりがしやすい事が伝われば嬉しいです。15分未満の動画です。

Decoratorパターンとは

GoFデザインパターンの一つです。ある機能を持つクラスを拡張したい場合に継承よりも柔軟な解決を提供します。同じインターフェースを実装した別のインスタンスで包み込むように実装します。

メリット

機能拡張を継承で行う実装に比べて以下のようなメリットがあります。

  • コード中の必要なタイミングでDecorateして動的に拡張することが可能になる(継承では実行時に拡張の結果が確定している)。
  • 複数のDecoratorを柔軟に付け替えることができ、Decoratorの機能を複数組み合わせて適用できる(単純な継承では組み合わせ爆発で重複コードが多数できてしまうケースだが、それを避けられる)。

言葉

移譲

あるクラスのメソッドを呼んだ時に、クラスが所有しているインスタンスに単純に処理をマルっとお願いしてしまう書き方です。

装飾という言葉について

Decorateの日本語訳が装飾なので、見た目やUIの事を言っているように受け止めてしまうかもしれませんが、あくまでクラスの設計や構造の話であって、UIに関係しないところでもDecoratorは有用です。ちょっと動画の中でもそう言うニュアンスに捉えられそうな表現があったので補足させてください。

解説に使用したコード ~ Sample code ~

https://github.com/CircleAround/pgonline/blob/master/src/20200728designpattern_decorator.ts

この記事を書いた人

佐藤 正志

サークルアラウンド株式会社 代表取締役