Ruby设计模式编程:Builder建造者模式实例解析
时间:2026-08-17 | 作者:清风无痕 | 阅读:0建造者模式核心要点
在深入代码之前,先快速过一遍建造者模式的核心要点,方便后续理解。
定义
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
建造者隐藏了该产品是如何组装的,所以若需要改变一个产品的内部表示,只需要重新定一个建造者就可以了。
实用范围
适用场景其实很明确:
- 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
- 当构造过程必须允许被构造的对象有不同表示时。
角色
在这个模式里,通常有四个角色:
- Builder:为创建一个产品对象的各个部件指定抽象接口。
- ConcreteBuilder:实现Builder的接口,以构造和装配该产品的各个部件;定义并明确它所创建的表示,并提供检索产品的接口。
- Director:构造一个使用Builder接口的对象。
- Product:表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程,包含定义组成部件的类,以及将这些部件装配成最终产品的接口。
具体实例
理论说完了,来看一个具体实例。
需求:
画一个小人,有头、身体、两手两脚即可。
听起来很简单,对吧?
初始代码
# -*- 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)来控制组装顺序。
这样一来,不管是画瘦子还是胖子,只要换一个建造者实例,导演类完全不用动,就能自动完成组装。
代码的复用性和可维护性一下子提升了不少。
总结
这就是建造者模式最朴素但最实用的用法:把“复杂对象的构造步骤”和“具体表示”解耦,让同样的流程产出不同的结果。
免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。
相关文章
更多-
- 使用RVM切换Ruby与Rails版本的实现方法
- 时间:2026-08-18
-
- Ruby语言是什么及入门使用方法
- 时间:2026-08-18
-
- Ruby on Rails网站项目搭建入门指南
- 时间:2026-08-18
-
- Ruby插入排序算法实现与二路插入排序代码示例
- 时间:2026-08-18
-
- Ruby图片滤镜算法实现代码与核心原理
- 时间:2026-08-18
-
- Ruby中Hash哈希结构基本操作方法详解
- 时间:2026-08-18
-
- Ruby面向对象编程:类方法与类扩展详解
- 时间:2026-08-18
-
- Ruby正则表达式语法详解与常用示例代码
- 时间:2026-08-18
精选合集
更多大家都在玩
大家都在看
更多-
- 糖尿病完全不能吃糖吗
- 时间:2026-09-15
-
- 蚂蚁庄园小课堂2026年9月16日最新题目答案
- 时间:2026-09-15
-
- 小鸡答题今天的答案是什么2026年9月16日
- 时间:2026-09-15
-
- 蚂蚁庄园每日答题答案2026年9月16日
- 时间:2026-09-15
-
- 以下哪种粮食是酿造绍兴黄酒的主要原料 蚂蚁庄园今日答案9月16日
- 时间:2026-09-15
-
- 劝学名句“及时当勉励,岁月不待人”出自哪位诗人 蚂蚁庄园今日答案9.16
- 时间:2026-09-15
-
- 蚂蚁庄园今天答题答案2026年9月16日
- 时间:2026-09-15
-
- 蚂蚁庄园答题今日答案2026年9月16日
- 时间:2026-09-15
