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

    建造者模式:

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

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

  • 相关阅读:
    java语法基础
    HashMap中的put()和get()的实现原理
    理解:o(1), o(n), o(logn), o(nlogn) 时间复杂度
    mongodb去重分页查询支持排序
    elk日志分析系统搭建(window )亲自搭建
    IDEA更改主题插件——Material Theme UI
    css实现图片的瀑布流且右上角有计数
    C# string "yyMMdd" 转DataTime
    Vue.js系列(一):Vue项目创建详解
    VS2017常用快捷键
  • 原文地址:https://www.cnblogs.com/fanxiaopeng/p/4229792.html
Copyright © 2011-2022 走看看