デザインパターン-Composite



Compositeパターンとは

Compositeデザインパターンは、「全体-部分」のモデル(個別のオブジェクトと合成したオブジェクト)を同一視することで、再帰的な構造をクラスで表現するためのパターンです。

「Composite」は「合成物、複合物」という意味の英単語です。


「全体-部分」のモデルは、「容器-中身」の関係です。

例えば、ファイルシステムにおける「フォルダ」が「容器」であり、「ファイルやサブフォルダ」が「中身」を意味します。

同一視できるとは、対象となるオブジェクトが「容器」でも「中身」でも同じ様に取り扱える(同じ名前のメソッドで処理できる)ことを意味します。


Compositeパターンの利点


構成要素


rubyによるCompositeパターンの実装

#!/usr/bin/env ruby

# Component(部品) 
class Entry
  def get_name
  end
  def ls_entry(prefix)
  end
end

# Leaf(葉) 
class FileEntry < Entry
  def initialize(name)
    @name = name
  end
  def get_name
    @name
  end
  def ls_entry(prefix)
    puts(prefix + "/" + get_name)
  end
end

# Composite(合成物) 
class DirEntry < Entry
  def initialize(name)
    @name = name
    @directory = Array.new
  end
  def get_name
    @name
  end
  def add(entry)
    @directory.push(entry)
  end
  def ls_entry(prefix)
    puts(prefix + "/" + get_name)
    @directory.each {|e|
      e.ls_entry(prefix + "/" + @name)
    }
  end
end

root = DirEntry.new("root")
tmp  = DirEntry.new("tmp")
tmp.add(FileEntry.new("passwd"))
tmp.add(FileEntry.new("plist"))
root.add(tmp)
root.ls_entry("")

関連ページ




スポンサード リンク