冒险村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

  # frozen_string_literal: true
  class BaseParser
    def initialize(file_path)
      @file_path = file_path
    end
  end

Add 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

Add app > parsers > csv_file_parser.rb

  class CsvFileParser < BaseParser
    def rows
      # parse rows
    end
  end

Add 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

参考资料

My blog


<<:  Day 28 JavaScript < 简单介绍>

>>:  30天打造品牌特色电商网站 Day.23 关於position定位

Day17-D3 的 Scale( ) 比例尺

本篇大纲:Domain & Range 输入域与输出域、Interpolate 插补值、c...

找LeetCode上简单的题目来撑过30天啦(DAY21)

不知道要打什麽,直接开始 题号:739 标题:Daily Temperatures 难度:Mediu...

Day 04 : Python 基础观念 (3)

很快地今天进入基础观念最後一个小章节(感动流泪啊XD),将带大家说明流程控制、回圈和函数的基本概念!...

[Android 开发经验三十天]#D30 完赛心得

夜阑人静小可怕 别怕!你有铁人赛,写吧! 心得 tags: 铁人赛 Templates 嗨,大家安...

IDS决策(IDS Decisions)

就IDS的准确性而言,观察到的每个活动都有四种可能的状态。 . 一个真正的积极状态(true pos...