冒險村23 - Design Pattern(3) - Builder

23 - Design Pattern(3) - Builder

Builder pattern 常常也被叫做 adapter,主要目的是提供一種根據情況 return,給 class 或 instance 的簡單方法,通常被拿來解析文件的內容,可以依照以下的方式來建立一個 builder:

Create app/parsers folder

  • base_parser.rb
  • file_parser.rb
  • csv_file_parser.rb
  • xls_file_parser.rb

Add app > parsers > base_parser.rb

1
2
3
4
5
6
# frozen_string_literal: true
class BaseParser
def initialize(file_path)
@file_path = file_path
end
end

Add app > parsers > file_parser.rb

1
2
3
4
5
6
7
8
9
10
11
# 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

Add app > parsers > csv_file_parser.rb

1
2
3
4
5
6
# frozen_string_literal: true
class CsvFileParser < BaseParser
def rows
# parse rows
end
end

Add app > parsers > xls_file_parser.rb

1
2
3
4
5
6
# frozen_string_literal: true
class XlsFileParser < BaseParser
def rows
# parse rows
end
end

再來,只需要 build 後,就可以取得 parser 底下的 rows,再根據要取得的資料做對應的 code 即可。

1
2
parser = FileParser.build(file_path)
rows = parser.rows

參考資料