我正在尝试使用observer模式在Ruby中创建一个组件系统。组件必须定义为模块,因为它们的存在只是为了混合到ComponentContainer
中。但是,Component
s有一些方法,理想情况下我想在某种基类中定义这些方法,但我不能这样做,因为它们是模块。
以下是我想做的事情:
module Component
def self.on(event, &block)
#definition..
end
def self.fire(event)
#pass event to subscribers
end
end
module FooComponent < Component
on :foo_event do |param1, param2|
#...
end
end
不同类型的组件
使用on
和fire
方法,但它们不能继承它们,因为模块不能有父级。我该怎么办?这不是红宝石色的吗?
我可以通过制作Component
和FooComponent
class来实现这一点,但我不能使用extend
或include
将它们混合到Component Container
中。