Ruby設計模式編程中使用Builder建造者模式的執行個體_ruby專題

來源:互聯網
上載者:User

先來複習一下設計模式的基本概念:
定義
將一個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。
建造者隱藏了該產品是如何組裝的,所以若需要改變一個產品的內部表示,只需要重新定一個建造者就可以了。
實用範圍
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 ''  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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.