首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >工厂中的动态注册类

工厂中的动态注册类
EN

Stack Overflow用户
提问于 2014-01-09 10:20:14
回答 1查看 610关注 0票数 1

我目前正在尝试实现与这个问题的选择答案中提出的类似的东西:Ruby design pattern: How to make an extensible factory class?

代码语言:javascript
复制
class LogFileReader

@@subclasses = { }
  def self.create type
    c = @@subclasses[type]
    if c
      c.new
    else
      raise "Bad log file type: #{type}"
    end
  end
  def self.register_reader name
    @@subclasses[name] = self
  end
end

class GitLogFileReader < LogFileReader
  def display
    puts "I'm a git log file reader!"
  end
  register_reader :git
end

class BzrLogFileReader < LogFileReader
  def display
    puts "A bzr log file reader..."
  end
  register_reader :bzr
end

LogFileReader.create(:git).display
LogFileReader.create(:bzr).display

class SvnLogFileReader < LogFileReader
  def display
    puts "Subersion reader, at your service."
  end
  register_reader :svn
end

LogFileReader.create(:svn).display

单元测试运行得无懈可击,但是当我启动服务器时,没有注册任何类。关于静态方法调用是如何工作的,我可能遗漏了什么?每个子类什么时候进行register_reader调用?

EN

回答 1

Stack Overflow用户

发布于 2018-08-29 03:35:06

为了回答OP关于类何时调用register_reader的问题,它发生在文件加载的时候。将此代码添加到初始化器中,以便自己加载文件。

Dir[Rails.root.join('path', 'to', 'log_file_readers', '**', '*.rb').to_s].each { |log_file_reader| require log_file_reader }

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21010515

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档