`

装饰模式(Decorator)

阅读更多
名字: 命令模式(Decorator)
别名: Wrapper
意图: 动态地给一个对象添加一些额外的职责. 就增加功能来说, Decorator模式相比生成子类更为灵活.
动机: 我们经常要给界面组件加一些特性; 用继承不灵活.

class HtmlTag
  def render
    raise "Abstract method"
  end
end

class DivTag < HtmlTag
  def render
    puts "显示div"
  end
end

class Effect
  def set_tag(tag)
    @tag = tag
  end

  def render
    @tag.render
  end
end

class GreedBorderEffect < Effect
  def render
    @tag.render
    puts "加绿边框"
  end
end

class RedBackgroundEffect < Effect
  def render
    @tag.render
    puts "加红背景"
  end
end

div_tag = DivTag.new
e1 = GreedBorderEffect.new
e2 = RedBackgroundEffect.new

e1.set_tag(div_tag)
e2.set_tag(e1)

e2.render






  • 大小: 43.1 KB
  • 大小: 6.2 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics