需求:
画一个小人,有头,有身体,两手两脚即可。
初始代码:
# -*- 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
建造者模式:
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
建造者隐藏了该产品是如何组装的,所以若需要改变一个产品的内部表示,只需要重新定一个建造者就可以了。