Ruby-类定义中的调用方法

时间:2018-11-30 18:34:24

标签: ruby design-patterns

我最近正在筛选一些代码,并遇到了类似这样的事情:

class A

  @@container = {}
  def self.register(a, b)
    @@container[a] = b
  end

  def self.get(a)
    @@contaienr[a]
  end
end


class BRunner < A
  A.register(D, self)

  def self.run
    #...
  end
end

class CRunner < A
  A.register(E, self)

  def self.run
    #...
  end
end


class C
  def self.call
    [D, E].each do |item|
      A.get(item).run()
    end
  end
end

BRunnerCRunner在运行时执行各自的类定义块时调用register。然后,当类C显式运行时,它调用DE映射到的对象,并调用run函数这在我看来似乎不对,这是不清楚的代码。这是Ruby还是不好的编程?

1 个答案:

答案 0 :(得分:0)

您的示例虽然是Ruby代码,但似乎不是特定于Ruby的设计模式。我怀疑这是为该代码库创建的软件设计模式。

没有实际代码库的上下文,很难说它是不是太抽象还是太“坏”,但是即使在您提供的小示例中,它也可能仍有改进的空间。

您可以找到用Ruby编写的常见软件设计模式的示例,以进行比较: