《大话设计模式》ruby版代码:建造者模式

需求:

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

初始代码:

# -*- 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

建造者模式:

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

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

原文地址:https://www.cnblogs.com/fanxiaopeng/p/4229792.html