最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Ruby設(shè)計(jì)模式編程中使用Builder建造者模式的實(shí)例

 更新時(shí)間:2016年03月16日 14:56:45   作者:范孝鵬  
這篇文章主要介紹了Ruby設(shè)計(jì)模式編程中使用Builder建造者模式的實(shí)例,建造者模式將一個(gè)復(fù)雜對(duì)象的構(gòu)造與它的表示分離,使同樣的構(gòu)建過(guò)程可以創(chuàng)建不同的表示,需要的朋友可以參考下

先來(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


相關(guān)文章

  • 快速安裝Ruby on Rails的簡(jiǎn)明指南

    快速安裝Ruby on Rails的簡(jiǎn)明指南

    這篇文章主要介紹了快速安裝Ruby on Rails的簡(jiǎn)明指南,Rails是Ruby上人氣絕對(duì)最高的web開(kāi)發(fā)框架,需要的朋友可以參考下
    2015-08-08
  • 詳細(xì)解析Ruby中的變量

    詳細(xì)解析Ruby中的變量

    這篇文章主要介紹了詳細(xì)解析Ruby中的變量,是Ruby學(xué)習(xí)中最基礎(chǔ)的知識(shí)之一,需要的朋友可以參考下
    2015-05-05
  • Ruby元編程的一些值得注意的地方

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

    這篇文章主要介紹了Ruby元編程的一些值得注意的地方,作者自己用實(shí)際代碼給出了相關(guān)示例,需要的朋友可以參考下
    2015-08-08
  • Ruby中的變量學(xué)習(xí)總結(jié)

    Ruby中的變量學(xué)習(xí)總結(jié)

    這篇文章主要介紹了Ruby中的變量學(xué)習(xí)總結(jié),本文詳細(xì)講解了Ruby中的局部變量、實(shí)例變量、類變量、全局變量等4種變量類型,并對(duì)它們的作用范圍做了總結(jié),需要的朋友可以參考下
    2014-11-11
  • Ruby on Rails框架程序連接MongoDB的教程

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

    在Rails中我們可以通過(guò)MongoMapper來(lái)使用MongoDB數(shù)據(jù)庫(kù),下面就來(lái)記錄一下Ruby on Rails框架程序連接MongoDB的教程,需要的朋友可以參考下
    2016-07-07
  • Ruby設(shè)計(jì)模式編程中使用Builder建造者模式的實(shí)例

    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算法學(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í)筆記

    這篇文章主要介紹了Ruby中的String對(duì)象學(xué)習(xí)筆記,本文講解了String對(duì)象的定義、String對(duì)象的操作、使用數(shù)組下標(biāo)的方式操作字符串等內(nèi)容,需要的朋友可以參考下
    2014-11-11
  • ruby實(shí)現(xiàn)的插入排序和冒泡排序算法

    ruby實(shí)現(xiàn)的插入排序和冒泡排序算法

    最近剛開(kāi)始學(xué)ruby為了練習(xí)一下基本語(yǔ)法的使用,用ruby寫了一下插入排序算法,可能有些從C#翻譯過(guò)來(lái)的痕跡
    2014-05-05
  • Jekyll靜態(tài)網(wǎng)站后臺(tái)引擎使用教程

    Jekyll靜態(tài)網(wǎng)站后臺(tái)引擎使用教程

    今天,我就來(lái)示范如何在github上搭建Blog,你可以從中掌握github的Pages功能,以及Jekyll軟件的基本用法。更重要的是,你會(huì)體會(huì)到一種建立網(wǎng)站的全新思路。
    2016-04-04

最新評(píng)論

饶河县| 汕头市| 西青区| 宜兰县| 双流县| 江达县| 红桥区| 佛教| 石家庄市| 东源县| 文山县| 岑溪市| 崇仁县| 西宁市| 合江县| 宜春市| 澄城县| 吴忠市| 海阳市| 杭州市| 阜新市| 云南省| 江源县| 南平市| 新兴县| 巴塘县| 济源市| 达日县| 东平县| 滦南县| 汪清县| 江阴市| 莒南县| 磐石市| 七台河市| 厦门市| 永州市| 华池县| 盐池县| 磴口县| 获嘉县|