zoukankan      html  css  js  c++  java
  • 《大话设计模式》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

    建造者模式:

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

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

  • 相关阅读:
    工作总结 vue 城会玩
    vue中,class、内联style绑定、computed属性
    vue-router2.0 组件之间传参及获取动态参数
    vue-router(2.0)
    在v-for中利用index来对第一项添加class(vue2.0)
    机器学习:从入门到沉迷
    探索AutoLayout的本质和解决一些问题
    软件的极简主义
    数组最大差值的最优解法(动态规划)
    项目管理--敏捷开发在项目中使用
  • 原文地址:https://www.cnblogs.com/fanxiaopeng/p/4229792.html
Copyright © 2011-2022 走看看