中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

Ruby塊和迭代器有哪些設計模式

小樊
82
2024-11-02 06:27:21
欄目: 編程語言

在Ruby中,塊(Block)和迭代器(Iterator)是實現循環和數據處理的重要工具。以下是一些與塊和迭代器相關的常用設計模式:

1. 適配器模式(Adapter Pattern)

適配器模式用于將一個類的接口轉換成客戶端所期望的另一個接口形式。在Ruby中,塊可以作為適配器使用,將一個集合適配成另一個集合的行為。

class ArrayAdapter
  def initialize(array)
    @array = array
  end

  def each(&block)
    @array.each(&block)
  end
end

# 使用示例
array = [1, 2, 3]
adapter = ArrayAdapter.new(array)
adapter.each { |item| puts item }

2. 裝飾器模式(Decorator Pattern)

裝飾器模式允許在不修改原始類的情況下,動態地添加新的功能。在Ruby中,塊可以作為裝飾器使用,為集合添加額外的操作。

class ArrayDecorator
  def initialize(array)
    @array = array
  end

  def each(&block)
    @array.each(&block)
  end

  def log_each(&block)
    each do |item|
      block.call(item)
      puts "Logged: #{item}"
    end
  end
end

# 使用示例
array = [1, 2, 3]
decorator = ArrayDecorator.new(array)
decorator.log_each { |item| puts item }

3. 組合模式(Composite Pattern)

組合模式允許將對象組合成樹形結構以表示“部分-整體”的層次結構。在Ruby中,塊可以作為組合的一部分,處理集合中的元素。

class CompositeCollection
  attr_accessor :elements

  def initialize
    @elements = []
  end

  def add(element)
    @elements << element
  end

  def each(&block)
    @elements.each(&block)
  end
end

# 使用示例
collection = CompositeCollection.new
collection.add("Element 1")
collection.add("Element 2")
collection.add("Element 3")

collection.each { |element| puts element }

4. 迭代器模式(Iterator Pattern)

迭代器模式提供一種方法順序訪問一個聚合對象中各個元素,而又不暴露其內部的表示。在Ruby中,迭代器模式是內置的,通過each方法實現。

class MyCollection
  def initialize
    @items = []
  end

  def add(item)
    @items << item
  end

  def each(&block)
    @items.each(&block)
  end
end

# 使用示例
collection = MyCollection.new
collection.add(1)
collection.add(2)
collection.add(3)

collection.each { |item| puts item }

5. 策略模式(Strategy Pattern)

策略模式定義一系列算法,把它們一個個封裝起來,并且使它們可以相互替換。在Ruby中,塊可以作為策略使用,實現不同的處理邏輯。

class Strategy
  def execute(&block)
    block.call
  end
end

class AddStrategy < Strategy
  def execute(&block)
    block.call(1)
  end
end

class MultiplyStrategy < Strategy
  def execute(&block)
    block.call(2)
  end
end

# 使用示例
strategy = AddStrategy.new
strategy.execute { |x| puts x + 1 } # 輸出 2

strategy = MultiplyStrategy.new
strategy.execute { |x| puts x * 2 } # 輸出 4

這些設計模式可以幫助你更靈活地使用塊和迭代器,實現更復雜的功能和邏輯。

0
个旧市| 深州市| 富锦市| 麦盖提县| 鹰潭市| 攀枝花市| 香格里拉县| 兴和县| 临沭县| 呼和浩特市| 长汀县| 张家口市| 浮山县| 柳州市| 西峡县| 德保县| 静安区| 尼木县| 义乌市| 宣汉县| 栾城县| 安宁市| 甘肃省| 江都市| 信阳市| 凯里市| 沭阳县| 乐陵市| 白玉县| 加查县| 台中县| 神池县| 浑源县| 行唐县| 兴城市| 东宁县| 河北省| 巴彦淖尔市| 呼伦贝尔市| 图们市| 融水|