抽象类和Mixin有什么区别?

时间:2009-02-26 16:48:12

标签: abstract-class mixins apache-zest cop

我刚刚在Java框架上发现了一个article,它显然允许它支持Mixins以及一种叫做面向复合编程的东西(据我所知,它甚至可能是同样的东西......)我也听说过/和AOP一起工作过,我不确定它与...的区别......

2 个答案:

答案 0 :(得分:25)

在语言无关的级别,mixin只是为类添加功能,更方便程序员并避免代码重复。抽象(基类)类形成is-a关系并允许多态。继承被过度使用的一个原因是,它是一种简单的方法来实现mixins而无需在不真正支持它们的语言中编写任何样板文件。问题在于,您将多态性is-a关系声明为副作用,从而使您的API更加混乱,并可能增加歧义。因此,像D和Ruby这样的新语言支持mixins作为本机特性,允许一种方便的方法向类中添加一堆功能,而不会声明多态的is-a关系。

答案 1 :(得分:0)

Mixin绝不是一个独立的阶级。它们只是为您声明的类添加了一些功能。在Python中,它们可以通过类装饰器轻松应用。例如,您可以使用Singleton mixin装饰您的课程,使您的课程成为单身人士。