以下是Ruby中的常见模式:
module Persistable
def initialize
# Initialize a persistable document.
end
end
class Foo
include Persistable
end
简单地进行子类化有什么优势呢?
class PersistableDocument
def initialize
# Initialize a persistable document.
end
end
class Foo < PersistableDocument
end
换句话说,为什么你会混合定义一个对象应该如何实例化的行为,如果完成所有这些是一个额外的代码行?
答案 0 :(得分:1)
当您需要共享许多类的代码而不仅仅是一个类时,应该使用模块。想想Ruby中使用的最常见的模块Enumerable。它希望包含在一个实现每个方法的对象中,该方法接受一个参数。
一旦它包含在这样的对象中,它将为其所有方法提供实现。所以这是使用模块的情况,你有一个共同的行为,你想与许多类共享这种行为,然后你可以使用一个模块来实现它。
模块不是替换继承的东西,它们只允许给你另一个选项来组成对象的行为。