woshidan's loose leaf

ぼんやり勉強しています

Compositeパターン

こう、他にやる事いっぱいあっても、デザパタの復習とデータベースの勉強は好んでやるから、今のところ、この辺がすきなんだろうなぁ、と。 (叩き上げすぎてこの辺やら無いと即死するだけですね)

Compositeパターンは、

  • Leaf 中身。この中に何も入れる事が出来ない
  • Composite 容器。CompositeLeafを中に持てる。
  • Component LeafCompositeを同じように扱うためのインタフェースを決めるクラス。
  • Client Componentを通してCompositeLeafを扱う

からなります。

せっかくなので、ファイルシステム以外にCompositeパターンが当てはまる例を考えてみます。

(思いつき次第追記する)

SQLのSELECT文の結果

RDBMSSQLのSELECT文はテーブルに対して投げますが、返ってくる結果もまたテーブルになっています。 なので、SELECT文の結果に対して、さらにクエリを飛ばす事が出来ます。

こういうのを、サブクエリとかいうのですが。

RDBMSの元になっている、リレーションモデルの演算は基本的にリレーションに対して演算を出して、リレーションを返すものになっていて、 それを実装したRDBMSのSELECTはCompositeパターンぽいですよね。

DOM要素

これは悪い例なんですが。デコレータパターンでもあるかも?

てきとーなJavaScriptライブラリによくある、ライブラリで動かす部分に

要素を作って、中にその動作を適用したい要素をコピーするなり、移すなりして突っ込む、というものがあります。

要素のクリックと、その中身へのクリックが同じように扱えることが多いからでしょうか。 (もしかしたら、モバイルではonclickのハンドラが違う事があるかも...)

いくつかのライブラリを入れてみました。

そうすると、クリックしたら5つくらいのdivに包まれて元の要素が表示されてはいるのだけど、どこにいるのか分からない......(苦笑)

そんなことになってデザイナさんに迷惑をかけないようにちゃんとライブラリは読みましょう。