- DB に日々のブックマーク数を保存している
- 指定した期間のブックマークの日別の数を表示
- ヘッダには指定した期間のブックマークの合計を表示
というような場合を想定。
このような場合は、DB から取ってきた結果をComposite パターンを使った箱に入れると便利。
このくらいの用途だと「sum すればいいじゃん」という話になるけれど、
- 複数のテーブルからデータを取ってきた結果をComposite に入れて、ひとつのオブジェクトにまとめられて便利
- Component とComposite の統一インターフェース(上の例ではCounts#count, Count#count)を持てるので、ポリモーフィズムを利用しやすい
- 入れ物に集計機能がついているので、DB 以外にmemcached から取得した結果に対して使えたりできる
等の利点はあるかなと思います。
また、Composite パターンはruby と相性がいいかなーと思っていて、上の例のCounts に次のようなeach を実装してあげてEnumerable をinclude してあげるとか。で、Counts#each で指定した期間の日付順にCount を取得できるようにするとかできる。
class Counts include Enumerable def each @counts.values.each{|c| yield(c) } end end