第11回 Composite

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

 

マインツ武藤さんが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パターンは特に難しくないのですが、採用する際に正しく選択できるかが難しそうですね。

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

 

では。

【カテゴリ】プログラミング

プロフィール

愛知県名古屋市にあるジャスウィルで働く社員です。

ジャスウィルは大学事業に特化したシステムを提案しています。『大学向け事務・教務統合パッケージ―TriR Campus』を開発しています。


Facebookページでは、イベントや普段の社員の様子を公開中♪
ぜひご覧ください☆

過去一年の月別記事 全て表示