位置:首页 > Ruby > Ruby设计模式编程:Builder建造者模式实例解析

Ruby设计模式编程:Builder建造者模式实例解析

时间:2026-08-17  |  作者:清风无痕  |  阅读:0

建造者模式核心要点

在深入代码之前,先快速过一遍建造者模式的核心要点,方便后续理解。

定义

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

建造者隐藏了该产品是如何组装的,所以若需要改变一个产品的内部表示,只需要重新定一个建造者就可以了。

实用范围

适用场景其实很明确:

  • 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
  • 当构造过程必须允许被构造的对象有不同表示时。

角色

在这个模式里,通常有四个角色:

  • Builder:为创建一个产品对象的各个部件指定抽象接口。
  • ConcreteBuilder:实现Builder的接口,以构造和装配该产品的各个部件;定义并明确它所创建的表示,并提供检索产品的接口。
  • Director:构造一个使用Builder接口的对象。
  • Product:表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程,包含定义组成部件的类,以及将这些部件装配成最终产品的接口。

具体实例

理论说完了,来看一个具体实例。

需求:

Ruby设计模式编程中使用Builder建造者模式的实例

画一个小人,有头、身体、两手两脚即可。

听起来很简单,对吧?

初始代码

# -*- encoding: utf-8 -*-

#小人一
puts '这是第一个小人'
puts '小人一:头'
puts '小人一:瘦身体'
puts '小人一:双手'
puts '小人一:双脚'

#小人二
puts '这是第二个小人'
puts '小人二:头'
puts '小人二:胖身体'
puts '小人二:双手'
puts '小人二:双脚'

这段代码的问题很明显:

  • 重复内容多。
  • 容易漏掉某个部件。
  • 维护起来很麻烦。

比如一个不留神,可能就少画了一条腿或一只胳膊。

改进代码

# -*- encoding: utf-8 -*-

#
class PersionBuilder
  def head
    puts ''
  end
  def body
    puts ''
  end
  def arm
    puts ''
  end
  def leg
    puts ''
  end
end

#小人一
class PersionThinBuilder < PersionBuilder
  def head
    puts '头'
  end
  def body
    puts '瘦身体'
  end
  def arm
    puts '双手'
  end
  def leg
    puts '双脚'
  end
end
#小人二
class PersionFatBuilder < PersionBuilder
  def head
    puts '头'
  end
  def body
    puts '胖身体'
  end
  def arm
    puts '双手'
  end
  def leg
    puts '双脚'
  end
end

#指挥者类
class PersionDirect
  def initialize(persion)
    @persion = persion
  end
  
  def create_persion
    @persion.head
    @persion.body
    @persion.arm
    @persion.leg
  end

end
puts '这是第一个小人'
p1 = PersionThinBuilder.new
pd1 = PersionDirect.new(p1)
pd1.create_persion

puts '这是第二个小人'
p2 = PersionThinBuilder.new
pd2 = PersionDirect.new(p2)
pd2.create_persion


重构思路

这次我们用建造者模式重构了一下。

先定义一个抽象的建造者接口(PersionBuilder),规定好每个部件对应的方法。

然后分别实现瘦小人和胖小人的具体建造者,最后通过一个导演类(PersionDirect)来控制组装顺序。

这样一来,不管是画瘦子还是胖子,只要换一个建造者实例,导演类完全不用动,就能自动完成组装。

代码的复用性和可维护性一下子提升了不少。

总结

这就是建造者模式最朴素但最实用的用法:把“复杂对象的构造步骤”和“具体表示”解耦,让同样的流程产出不同的结果。

免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。

相关文章

更多

精选合集

更多

大家都在玩

热门话题

大家都在看

更多