Builder pattern 常常也被叫做 adapter,主要目的是提供一種根據情況 return,給 class 或 instance 的簡單方法,通常被拿來解析文件的內容,可以依照以下的方式來建立一個 builder:
app/parsers folderapp > parsers > base_parser.rb  # frozen_string_literal: true
  class BaseParser
    def initialize(file_path)
      @file_path = file_path
    end
  end
app > parsers > file_parser.rb  # frozen_string_literal: true
  class FileParser
    def self.build(file_path)
      case File.extname(file_path)
        when ".csv" then CsvFileParser.new(file_path)
        when ".xls" then XlsFileParser.new(file_path)
        else
          raise(UnknownFileFormat)
        end
    end
  end
註: extname - https://apidock.com/ruby/File/extname/class
app > parsers > csv_file_parser.rb  class CsvFileParser < BaseParser
    def rows
      # parse rows
    end
  end
app > parsers > xls_file_parser.rb  class XlsFileParser < BaseParser
    def rows
      # parse rows
    end
  end
再來,只需要 build 後,就可以取得 parser 底下的 rows,再根據要取得的資料做對應的 code 即可。
  parser = FileParser.build(file_path)
  rows = parser.rows