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

    建造者模式:

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

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

  • 相关阅读:
    9.对话框
    8.布局管理器
    7.对象模型
    6.添加动作
    5.Qt模块简介
    4.自定义信号槽
    3.信号槽
    2.Helloworld
    1.Qt简介
    Problem E: 成绩排序
  • 原文地址:https://www.cnblogs.com/fanxiaopeng/p/4229792.html
Copyright © 2011-2022 走看看