先来复习一下设计模式的基本概念:
定义
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
建造者隐藏了该产品是如何组装的,所以若需要改变一个产品的内部表示,只需要重新定一个建造者就可以了。
实用范围
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,建造者模式,设计模式
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
暂无“Ruby设计模式编程中使用Builder建造者模式的实例”评论...
更新动态
2024年11月29日
2024年11月29日
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]