第11回 Composite

NO IMAGE

こんにちわ。ぼんじりです。

 

マインツ武藤さんが2点を取る活躍をしましたね。試合を見るに今後も期待せざるを得ないです。

継続的に活躍できれば良いですね。

 

今回はお久しぶりのデザインパターンの11回目で、Compositeパターンをまとめてみたいと思います。

 

Compositeパターンとは・・・

容器と中身を同一視し、再帰的な構造を作るパターンである。

 

PCのファイルシステムである「ディレクトリ」のようなものらしいです。

フォルダの中には、フォルダかファイルが存在しています。それらは「ディレクトリエントリ」として扱われ、同一視して処理を行っていきます。

 

この処理を実現するためのデザインパターンがCompositeパターンになるようです。

 

<例>

抽象クラス   :Entryクラス

抽象メソッド  :getName、getSize、printList、add

 

実装クラス   :Fileクラス(Entryクラスのサブクラス)

実装メソッド  :getName、getSize、printList

 

実装クラス   :Directoryクラス(Entryクラスのサブクラス)

実装メソッド  :getName、getSize、printList、add

 

このような構造にすることによって、FileであってもDirectoryであってもEntryとして扱うことができます。

ただし、addメソッドはDirectoryにFileを追加するメソッドなので、Fileクラスでは実装しません。

 

その場合、Fileクラスではaddに実装せずエラーとして投げる方法やなにも処理を実装しないなどの手法をとります。

 

箇条書きの項目やマクロコマンドを作るときの再帰的な構造を実現できるようです。

 

Compositeパターンは特に難しくないのですが、採用する際に正しく選択できるかが難しそうですね。

ディレクトリの構造以外に何か使いどころはあるのでしょうか。

 

では。