《大话设计模式》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

建造者模式:

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

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

你可能感兴趣的:(建造者模式)