Ruby设计模式编程中使用Builder建造者模式的实例

 更新时间:2016年03月16日 14:56:45   作者:范孝鹏  
这篇文章主要介绍了Ruby设计模式编程中使用Builder建造者模式的实例,建造者模式将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,需要的朋友可以参考下

先来复习一下设计模式的基本概念:
定义
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
建造者隐藏了该产品是如何组装的,所以若需要改变一个产品的内部表示,只需要重新定一个建造者就可以了。
实用范围
1.当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
2.当构造过程必须允许被构造的对象有不同表示时。
角色
在这样的设计模式中,有以下几个角色:
1.builder:为创建一个产品对象的各个部件指定抽象接口。
2.ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,并 提供一个检索产品的接口。
3.Director:构造一个使用Builder接口的对象。
4.Product:表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程,包含定义组成部件的类,包括将这些部件装配成最终产品的接口。
下面我们来看一个实例:
需求:

画一个小人,有头,有身体,两手两脚即可。

初始代码:

# -*- 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


相关文章

  • 快速安装Ruby on Rails的简明指南

    快速安装Ruby on Rails的简明指南

    这篇文章主要介绍了快速安装Ruby on Rails的简明指南,Rails是Ruby上人气绝对最高的web开发框架,需要的朋友可以参考下
    2015-08-08
  • 详细解析Ruby中的变量

    详细解析Ruby中的变量

    这篇文章主要介绍了详细解析Ruby中的变量,是Ruby学习中最基础的知识之一,需要的朋友可以参考下
    2015-05-05
  • Ruby元编程的一些值得注意的地方

    Ruby元编程的一些值得注意的地方

    这篇文章主要介绍了Ruby元编程的一些值得注意的地方,作者自己用实际代码给出了相关示例,需要的朋友可以参考下
    2015-08-08
  • Ruby中的变量学习总结

    Ruby中的变量学习总结

    这篇文章主要介绍了Ruby中的变量学习总结,本文详细讲解了Ruby中的局部变量、实例变量、类变量、全局变量等4种变量类型,并对它们的作用范围做了总结,需要的朋友可以参考下
    2014-11-11
  • Ruby on Rails框架程序连接MongoDB的教程

    Ruby on Rails框架程序连接MongoDB的教程

    在Rails中我们可以通过MongoMapper来使用MongoDB数据库,下面就来记录一下Ruby on Rails框架程序连接MongoDB的教程,需要的朋友可以参考下
    2016-07-07
  • Ruby设计模式编程中使用Builder建造者模式的实例

    Ruby设计模式编程中使用Builder建造者模式的实例

    这篇文章主要介绍了Ruby设计模式编程中使用Builder建造者模式的实例,建造者模式将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,需要的朋友可以参考下
    2016-03-03
  • Luhn算法学习及其Ruby版实现代码示例

    Luhn算法学习及其Ruby版实现代码示例

    Luhn算法主要北用来进行数字验证,尤其是卡号身份证号等,这里我们就来看一下Luhn算法学习及其Ruby版实现代码示例:
    2016-05-05
  • Ruby中的String对象学习笔记

    Ruby中的String对象学习笔记

    这篇文章主要介绍了Ruby中的String对象学习笔记,本文讲解了String对象的定义、String对象的操作、使用数组下标的方式操作字符串等内容,需要的朋友可以参考下
    2014-11-11
  • ruby实现的插入排序和冒泡排序算法

    ruby实现的插入排序和冒泡排序算法

    最近刚开始学ruby为了练习一下基本语法的使用,用ruby写了一下插入排序算法,可能有些从C#翻译过来的痕迹
    2014-05-05
  • Jekyll静态网站后台引擎使用教程

    Jekyll静态网站后台引擎使用教程

    今天,我就来示范如何在github上搭建Blog,你可以从中掌握github的Pages功能,以及Jekyll软件的基本用法。更重要的是,你会体会到一种建立网站的全新思路。
    2016-04-04

最新评论