名字: 组合模式(Composite)
别名: 部分-整体模式合成模式
意图: 将对象组合成树形结构以表示"[b]部分-整体[/b]"的层次结构.Composite模式使得用户对[b]单个对象和组合对象的使用具有一致性[/b].
类图:
[img]http://dl.iteye.com/upload/attachment/174509/59e873cc-5d28-3405-a9ea-7b6848c66c23.jpg[/img]
运行结果:
[img]http://dl.iteye.com/upload/attachment/174507/374f57fc-a418-30e3-b8c2-b8b9e817cca9.jpg[/img]
别名: 部分-整体模式合成模式
意图: 将对象组合成树形结构以表示"[b]部分-整体[/b]"的层次结构.Composite模式使得用户对[b]单个对象和组合对象的使用具有一致性[/b].
class Tag
attr_accessor :name
def initialize(name)
@name = name
end
def name
@name
end
def display(depth)
puts " " * depth + @name
end
end
class Component
attr_accessor :name, :items
def initialize(name)
@name = name
@items = []
end
def add(item)
@items << item
end
def remove(item)
@items.delete(item)
end
def name
["[", @name, "]"].join
end
def display(depth)
puts " " * depth + name
@items.each do |item|
item.display(depth + 2)
end
end
end
html = Component.new('html')
item_type_select =Tag.new('ItemTypeSelect')
html.add(item_type_select)
html.remove(item_type_select)
date_select = Component.new('DateSelectTag')
date_select.add(Tag.new('YearSelectTag'))
date_select.add(Tag.new('MonthSelectTag'))
date_select.add(Tag.new('DayTag'))
html.add(date_select)
html.add(Tag.new('NameInputTag'))
html.display(1)
类图:
[img]http://dl.iteye.com/upload/attachment/174509/59e873cc-5d28-3405-a9ea-7b6848c66c23.jpg[/img]
运行结果:
[img]http://dl.iteye.com/upload/attachment/174507/374f57fc-a418-30e3-b8c2-b8b9e817cca9.jpg[/img]