Decoratorパターン@Java言語で学ぶデザインパターン入門

Java画像

参考書籍

Decoratorパターンとは?

参考書籍によると

中心となるオブジェクトがあり、それに飾り付けとなる機能を一皮一皮かぶせて行って、より目的に合ったオブジェクトに仕上げていくのです。

オブジェクトににどんどんデコレーションを施して行くようなデザインパターン

メリット

  • 透過的なインターフェース
  • 中身を変えずに、機能追加ができる
  • 動的な機能追加ができる
  • 単純な品揃えでも、多様な機能追加ができる

詳細についてはサンプルコードを見ながら確認していきましょう。

サンプルコード

文字列の周りに飾り枠をつけて表示するサンプルコードを作っていきます。

UMLは以下の通り

Displayクラス

複数行からなる文字列を表示するための抽象クラスです。

show()メソッドは全ての行を表示するメソッドで、TemplateMethodパターンを使って作成されています。

Template Methodパターンについては以下の記事を参照してください。

image TemplateMethodパターン@Java言語で学ぶデザインパターン入門

StringBorderクラス

一行の文字列を表示するためのクラスです。

Borderクラス

飾り枠を表す抽象クラスですが、文字列表示を行うDisplayクラスを継承しています。

つまりBorder(飾り)と中身(Display)を同一視することができます。

こうすることで、DisplayのAPIを全てのクラスから見ることができます。

これを「インターフェースが透明的」であると言います。」

似たような構造はCompositeパターンにも登場しますので、併せて参照してみてください。

Java画像 Compositeパターン@Java言語によるデザインパターン入門

SideBorderクラス

具体的な飾り枠です。

文字列の左右に決まった文字列をくっつけます。

getRowText()メソッドでdecorateしています。

FullBorderクラス

具体的な飾りつけクラスです。

Side Borderと違い、上下左右に飾り付けをします。

このようにBorderを継承してさえいれば、多様な機能追加をすることができます。

Mainクラス

display4をみてください。

包みに包んでいます。

また包まれるものを変更せずに動的に機能追加を行うことでできています

出力

関連しているパターン

Java画像 Compositeパターン@Java言語によるデザインパターン入門

Java画像 Strategyパターン@Java言語で学ぶデザインパターン入門

Java画像 Adapterパターン/Wrapperパターン@Java言語で学ぶデザインパターン入門

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


error: Content is protected !!