Ruby設(shè)計(jì)模式編程中使用Builder建造者模式的實(shí)例
先來(lái)復(fù)習(xí)一下設(shè)計(jì)模式的基本概念:
定義
將一個(gè)復(fù)雜對(duì)象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過(guò)程可以創(chuàng)建不同的表示。
建造者隱藏了該產(chǎn)品是如何組裝的,所以若需要改變一個(gè)產(chǎn)品的內(nèi)部表示,只需要重新定一個(gè)建造者就可以了。
實(shí)用范圍
1.當(dāng)創(chuàng)建復(fù)雜對(duì)象的算法應(yīng)該獨(dú)立于該對(duì)象的組成部分以及它們的裝配方式時(shí)。
2.當(dāng)構(gòu)造過(guò)程必須允許被構(gòu)造的對(duì)象有不同表示時(shí)。
角色
在這樣的設(shè)計(jì)模式中,有以下幾個(gè)角色:
1.builder:為創(chuàng)建一個(gè)產(chǎn)品對(duì)象的各個(gè)部件指定抽象接口。
2.ConcreteBuilder:實(shí)現(xiàn)Builder的接口以構(gòu)造和裝配該產(chǎn)品的各個(gè)部件,定義并明確它所創(chuàng)建的表示,并 提供一個(gè)檢索產(chǎn)品的接口。
3.Director:構(gòu)造一個(gè)使用Builder接口的對(duì)象。
4.Product:表示被構(gòu)造的復(fù)雜對(duì)象。ConcreteBuilder創(chuàng)建該產(chǎn)品的內(nèi)部表示并定義它的裝配過(guò)程,包含定義組成部件的類,包括將這些部件裝配成最終產(chǎn)品的接口。
下面我們來(lái)看一個(gè)實(shí)例:
需求:
畫一個(gè)小人,有頭,有身體,兩手兩腳即可。
初始代碼:
# -*- encoding: utf-8 -*- #小人一 puts '這是第一個(gè)小人' puts '小人一:頭' puts '小人一:瘦身體' puts '小人一:雙手' puts '小人一:雙腳' #小人二 puts '這是第二個(gè)小人' puts '小人二:頭' puts '小人二:胖身體' puts '小人二:雙手' puts '小人二:雙腳'
問(wèn)題:代碼重復(fù),而且容易出錯(cuò),缺胳膊少腿之類的。
改進(jìn)代碼:
# -*- 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 '這是第一個(gè)小人'
p1 = PersionThinBuilder.new
pd1 = PersionDirect.new(p1)
pd1.create_persion
puts '這是第二個(gè)小人'
p2 = PersionThinBuilder.new
pd2 = PersionDirect.new(p2)
pd2.create_persion
- 設(shè)計(jì)模式中的觀察者模式在Ruby編程中的運(yùn)用實(shí)例解析
- 實(shí)例解析Ruby設(shè)計(jì)模式開(kāi)發(fā)中對(duì)觀察者模式的實(shí)現(xiàn)
- 深入剖析Ruby設(shè)計(jì)模式編程中對(duì)命令模式的相關(guān)使用
- Ruby設(shè)計(jì)模式編程中對(duì)外觀模式的應(yīng)用實(shí)例分析
- 詳解組合模式的結(jié)構(gòu)及其在Ruby設(shè)計(jì)模式編程中的運(yùn)用
- 設(shè)計(jì)模式中的模板方法模式在Ruby中的應(yīng)用實(shí)例兩則
- 實(shí)例解析Ruby設(shè)計(jì)模式編程中Strategy策略模式的使用
- 實(shí)例講解Ruby使用設(shè)計(jì)模式中的裝飾器模式的方法
- 詳解Ruby設(shè)計(jì)模式編程中對(duì)單例模式的運(yùn)用
- Ruby設(shè)計(jì)模式編程之適配器模式實(shí)戰(zhàn)攻略
- Ruby使用設(shè)計(jì)模式中的代理模式與裝飾模式的代碼實(shí)例
- Ruby中使用設(shè)計(jì)模式中的簡(jiǎn)單工廠模式和工廠方法模式
- 解析proxy代理模式在Ruby設(shè)計(jì)模式開(kāi)發(fā)中的運(yùn)用
相關(guān)文章
Ruby設(shè)計(jì)模式編程中使用Builder建造者模式的實(shí)例
這篇文章主要介紹了Ruby設(shè)計(jì)模式編程中使用Builder建造者模式的實(shí)例,建造者模式將一個(gè)復(fù)雜對(duì)象的構(gòu)造與它的表示分離,使同樣的構(gòu)建過(guò)程可以創(chuàng)建不同的表示,需要的朋友可以參考下2016-03-03
Luhn算法學(xué)習(xí)及其Ruby版實(shí)現(xiàn)代碼示例
Luhn算法主要北用來(lái)進(jìn)行數(shù)字驗(yàn)證,尤其是卡號(hào)身份證號(hào)等,這里我們就來(lái)看一下Luhn算法學(xué)習(xí)及其Ruby版實(shí)現(xiàn)代碼示例:2016-05-05
Ruby中的String對(duì)象學(xué)習(xí)筆記
這篇文章主要介紹了Ruby中的String對(duì)象學(xué)習(xí)筆記,本文講解了String對(duì)象的定義、String對(duì)象的操作、使用數(shù)組下標(biāo)的方式操作字符串等內(nèi)容,需要的朋友可以參考下2014-11-11
Jekyll靜態(tài)網(wǎng)站后臺(tái)引擎使用教程
今天,我就來(lái)示范如何在github上搭建Blog,你可以從中掌握github的Pages功能,以及Jekyll軟件的基本用法。更重要的是,你會(huì)體會(huì)到一種建立網(wǎng)站的全新思路。2016-04-04

