45fan.com - 路饭网

搜索: 您的位置主页 > 网络频道 > 阅读资讯:如何在Ruby设计模式编程中使用Builder建造者模式?

如何在Ruby设计模式编程中使用Builder建造者模式?

2016-04-03 18:09:20 来源:www.45fan.com 【

如何在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



本文地址:http://www.45fan.com/a/question/44753.html
Tags: 编程 ruby Builder
编辑:路饭网
关于我们 | 联系我们 | 友情链接 | 网站地图 | Sitemap | App | 返回顶部