浏览 1463 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-12-09
最后修改:2010-01-13
意图:将对象组合成树形结构以表示“部分-整体”的层次结构。Composite模式使得用户对单个对象和组合对象的使用具有一致性。 动机:
适用性:
结构: 效果:
误用: 只有Leaf 没有组合对象时. 附件说明: 在动态语言弱类型中,省去了用泛型来实现组合结构. 下面是个小例子,关于魔兽中物品或装备合成: class Equip attr_accessor :components, :name, :attack, :defense, :level def initialize(options={}) @components = [] @level = 0 @attack = 100 @defense = 10 @name = options[:name] end def upgrade @attack *= 1.1 @defense *= 1.06 @level += 1 puts '升级成功' end def full_name "#{@name} LV#{@level}" end def add(c) @components << c end def remove(c) @components.delete_if{|i| i.name == c.name} end end class Material attr_accessor :name def initialize(options={}) @name = options[:name] end end e1 = Equip.new(:name => '小刀') e1.add(Material.new(:name => '材料1')) e2 = Equip.new(:name => '大刀') e2.add(e1) e2.add(Material.new(:name => '宝石')) e2.upgrade puts e2.full_name 类图: 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |