什么是Mixin

什么是Mixin

mixin实际是mix in这个短语,即混入的意思。在网上一通百度,感觉下面一些话说得挺在理:

  • mixin 其实就是在语言不提供标准多重继承的情况下,变相实现多重继承的一个语法糖。 不同版本的 mixin 实现不太一样,但出发点都是在允许继承接口和继承实现的基础上,简化继承关系,避免多重继承的坑。
  • Mixin是一种特殊的多重继承,也就是多重继承的子集。使用Mixin的好处是,同时享有单一继承的单纯性和多重继承的共有性。
  • 作为Mixin类,需要满足以下条件:
    不能单独生成实例对象,属于抽象类。
    不能继承Mixin以外的类。
    因为有以上限制,Mixin类通常作为功能模块使用,在需要该功能时“混入”,而且不会使类的关系变得复杂(比如,同名方法到底从哪个父类继承)。

  • Mixin 实质上是利用语言特性来更简洁地实现组合模式。

看了以上这些话,结合个人理解Mixin的概念其实挺简单,它本质上就是一种编程模式,当我们需要完成一些特定功能的时候,发现这些功能通过继承一些类或者组合一些类,通过各种机制把这些类中的功能进行混合加工。然后就能够完成特定的功能。把这样的封装以Mixin类的方式对外暴露,这时就可以引入这样一种 “混入”的编程思想,它的名字就叫Mixin。

下面是一些参考链接:

https://www.zhihu.com/question/20778853
https://www.cnblogs.com/xybaby/p/6484262.html
https://www.zybang.com/question/06c0c51f4a2984bb909102b17980362c.html
https://www.jb51.net/article/130371.htm
http://www.php.cn/python-tutorials-88720.html