Ruby設(shè)計模式編程中使用Builder建造者模式的實例
先來復(fù)習(xí)一下設(shè)計模式的基本概念:
定義
將一個復(fù)雜對象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。
建造者隱藏了該產(chǎn)品是如何組裝的,所以若需要改變一個產(chǎn)品的內(nèi)部表示,只需要重新定一個建造者就可以了。
實用范圍
1.當創(chuàng)建復(fù)雜對象的算法應(yīng)該獨立于該對象的組成部分以及它們的裝配方式時。
2.當構(gòu)造過程必須允許被構(gòu)造的對象有不同表示時。
角色
在這樣的設(shè)計模式中,有以下幾個角色:
1.builder:為創(chuàng)建一個產(chǎn)品對象的各個部件指定抽象接口。
2.ConcreteBuilder:實現(xiàn)Builder的接口以構(gòu)造和裝配該產(chǎn)品的各個部件,定義并明確它所創(chuàng)建的表示,并 提供一個檢索產(chǎn)品的接口。
3.Director:構(gòu)造一個使用Builder接口的對象。
4.Product:表示被構(gòu)造的復(fù)雜對象。ConcreteBuilder創(chuàng)建該產(chǎn)品的內(nèi)部表示并定義它的裝配過程,包含定義組成部件的類,包括將這些部件裝配成最終產(chǎn)品的接口。
下面我們來看一個實例:
需求:
畫一個小人,有頭,有身體,兩手兩腳即可。
初始代碼:
# -*- encoding: utf-8 -*- #小人一 puts '這是第一個小人' puts '小人一:頭' puts '小人一:瘦身體' puts '小人一:雙手' puts '小人一:雙腳' #小人二 puts '這是第二個小人' puts '小人二:頭' puts '小人二:胖身體' puts '小人二:雙手' puts '小人二:雙腳'
問題:代碼重復(fù),而且容易出錯,缺胳膊少腿之類的。
改進代碼:
# -*- 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
- 設(shè)計模式中的觀察者模式在Ruby編程中的運用實例解析
- 實例解析Ruby設(shè)計模式開發(fā)中對觀察者模式的實現(xiàn)
- 深入剖析Ruby設(shè)計模式編程中對命令模式的相關(guān)使用
- Ruby設(shè)計模式編程中對外觀模式的應(yīng)用實例分析
- 詳解組合模式的結(jié)構(gòu)及其在Ruby設(shè)計模式編程中的運用
- 設(shè)計模式中的模板方法模式在Ruby中的應(yīng)用實例兩則
- 實例解析Ruby設(shè)計模式編程中Strategy策略模式的使用
- 實例講解Ruby使用設(shè)計模式中的裝飾器模式的方法
- 詳解Ruby設(shè)計模式編程中對單例模式的運用
- Ruby設(shè)計模式編程之適配器模式實戰(zhàn)攻略
- Ruby使用設(shè)計模式中的代理模式與裝飾模式的代碼實例
- Ruby中使用設(shè)計模式中的簡單工廠模式和工廠方法模式
- 解析proxy代理模式在Ruby設(shè)計模式開發(fā)中的運用
相關(guān)文章
Ruby學(xué)習(xí)筆記二幫助生成Vim添加代碼頭的代碼
這篇文章主要介紹了Ruby幫助生成Vim添加代碼頭的代碼,需要的朋友可以參考下2014-07-07Ruby中的類Google Map/Reduce框架Skynet介紹
這篇文章主要介紹了Ruby中的類Google Map/Reduce框架Skynet介紹,Skynet是一款創(chuàng)建分布式應(yīng)用程序的框架,需要的朋友可以參考下2015-01-01Ruby使用REXML庫來解析xml格式數(shù)據(jù)的方法
這篇文章主要介紹了Ruby使用REXML庫來解析xml格式數(shù)據(jù)的方法,文章最后提及了REXML庫的使用相關(guān)安全問題可以注意一下,需要的朋友可以參考下2016-04-04Ruby中使用設(shè)計模式中的簡單工廠模式和工廠方法模式
這篇文章主要介紹了Ruby中使用設(shè)計模式中的簡單工廠模式和工廠方法模式的示例,這兩種模式經(jīng)常被用于Ruby on Rails開發(fā)的結(jié)構(gòu)設(shè)計中,需要的朋友可以參考下2016-03-03實例講解Ruby中的鉤子方法及對方法調(diào)用添加鉤子
鉤子方法即是在普通的方法上添加"鉤子",使特定事件發(fā)生時可以被調(diào)用,下面就來以實例講解Ruby中的鉤子方法及對方法調(diào)用添加鉤子2016-06-06Ruby簡潔學(xué)習(xí)筆記(二):類繼承、屬性、類變量
這篇文章主要介紹了Ruby簡潔學(xué)習(xí)筆記(二):類繼承、屬性、類變量,本文是個人學(xué)習(xí)總結(jié)第二篇,需要的朋友可以參考下2015-01-01