国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Ruby > 正文

Ruby設計模式編程中使用Builder建造者模式的實例

2020-10-29 19:36:19
字體:
供稿:網(wǎng)友

先來復習一下設計模式的基本概念:
定義
將一個復雜對象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。
建造者隱藏了該產(chǎn)品是如何組裝的,所以若需要改變一個產(chǎn)品的內(nèi)部表示,只需要重新定一個建造者就可以了。
實用范圍
1.當創(chuàng)建復雜對象的算法應該獨立于該對象的組成部分以及它們的裝配方式時。
2.當構(gòu)造過程必須允許被構(gòu)造的對象有不同表示時。
角色
在這樣的設計模式中,有以下幾個角色:
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)造的復雜對象。ConcreteBuilder創(chuàng)建該產(chǎn)品的內(nèi)部表示并定義它的裝配過程,包含定義組成部件的類,包括將這些部件裝配成最終產(chǎn)品的接口。
下面我們來看一個實例:
需求:

畫一個小人,有頭,有身體,兩手兩腳即可。

初始代碼:

# -*- 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 ''  endend#小人一class PersionThinBuilder < PersionBuilder  def head    puts '頭'  end  def body    puts '瘦身體'  end  def arm    puts '雙手'  end  def leg    puts '雙腳'  endend#小人二class PersionFatBuilder < PersionBuilder  def head    puts '頭'  end  def body    puts '胖身體'  end  def arm    puts '雙手'  end  def leg    puts '雙腳'  endend#指揮者類class PersionDirect  def initialize(persion)    @persion = persion  end    def create_persion    @persion.head    @persion.body    @persion.arm    @persion.leg  endendputs '這是第一個小人'p1 = PersionThinBuilder.newpd1 = PersionDirect.new(p1)pd1.create_persionputs '這是第二個小人'p2 = PersionThinBuilder.newpd2 = PersionDirect.new(p2)pd2.create_persion

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 城固县| 勐海县| 永善县| 蒙自县| 孝感市| 沙洋县| 苍溪县| 蒲城县| 永川市| 贵德县| 乌什县| 深州市| 莱西市| 富阳市| 武强县| 布尔津县| 山阳县| 陇川县| 客服| 浦北县| 玉山县| 海兴县| 兴文县| 冀州市| 黑山县| 宁南县| 兴和县| 崇阳县| 曲水县| 甘洛县| 称多县| 夏河县| 肃南| 白银市| 临漳县| 行唐县| 陆丰市| 宣恩县| 漾濞| 太湖县| 商水县|