1
39
如果只在类定义中混合抽象特性,然后在对象实例化时混合相应的具体特性,那么在scala中就可以避免人们使用mix-in的许多问题。例如
这个结构有几点值得推荐。首先,由于需要不同的特征功能组合,它可以防止类的爆炸。第二,它允许简单的测试,因为可以创建和混合“什么都不做”的具体特性,类似于模拟对象。最后,我们完全隐藏了所使用的锁定特性,甚至是正在进行的锁定,不让我们的服务消费者看到。 由于我们已经克服了混合输入的大部分声称的缺点,我们仍然需要权衡。 在混合物和成分之间。对于我自己来说,我通常根据假设的委托对象是否完全由包含对象封装,或者它是否可能被共享并拥有自己的生命周期来做出决定。锁定为完全封装的委托提供了一个很好的例子。如果您的类使用锁对象来管理对其内部状态的并发访问,则该锁完全由包含对象控制,并且它及其操作都不会作为类的公共接口的一部分进行公布。对于这种完全封装的功能,我使用mix-in。对于共享的东西,如数据源,使用合成。 |
2
10
您没有提到的其他差异:
【Martin2003】:Robert C.Martin,《敏捷软件开发:原则、模式和实践》,Prentice Hall,2003年。
因此 advice, still from Programming Scala :
最后一部分,关于 最初的 状态 对于一个对象,通常有助于确定给定概念的类(和类组成)和特征(和混合)。 |
Jivan · 使用mypy在Python中强制合成 2 年前 |
woockashek · Java中同一类的继承和组合 6 年前 |
Sepehr Sobhani · 函数Ramda在范围外传递函数参数 6 年前 |
M. Pilarczyk · 如何确保合成方法的安全? 8 年前 |
daign · 在JavaScript中混合作为对象本身的对象属性 8 年前 |
arjacsoh · 当不允许多重继承时,如何避免代码重复? 10 年前 |