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

    建造者模式:

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

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

  • 相关阅读:
    MySQL查询缓存
    MySQL复制相关参数详解
    MySQL复制机制
    MySQL数据库的多表查询操作
    MySQL数据库单表查询基本操作及DML语句
    Hadoop大数据系列汇总
    MySQL数据库之日志功能详解
    MySQL数据库扫盲
    MySQL数据库之数据类型及基本使用详解
    MySQL数据库之日志管理
  • 原文地址:https://www.cnblogs.com/fanxiaopeng/p/4229792.html
Copyright © 2011-2022 走看看