什么是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

 


 

以上是本人2018年的理解,感觉还是有点隔靴挠痒似懂非懂的感觉。近二三年随着功力的提升,下面重新说下对Mixin 的认识:

Mixin是一种编程模式, 笼统地说就是综合多个类的功能产生一个类,但不用多继承。如果说得更直白一点,就是把原先多个类中的某些功能,为了使用上的方便合并到一个类中。

      比如原先有十个类,每个类中有一堆的方法,现在需要实现一个新功能,可能类A中需要一到二个方法,类B中需要几个方法,以此类推,这样原先可能要继承或依赖那十个类中的部分方法才能完成这个新功能,但现在通过Mixin模式,可以基于这十个类搞出一个新的类来,这个新类里面有原先散落在十个类中我们想要的方法。这样实现新功能时只要依赖一个类就可以了 , 可以减少过多代码的干扰。

      那么这个新类就称之为Mixin类,而搞出这个Mixin类的方式或代码实现套路就称之为Mixin设计模式。 为什么这个设计模式在JS中得到广泛应用呢?因为在JS语言中有一个

prototype(原型对象)的概念,借助这个prototype可以方便的完成这个事。不过用java语言也是可以完成的,比如上面的例子,我们借助AOP技术,就完全可以根据十个类产生我们想要的一个新的代理类来实现Mixin 


 

posted @ 2018-07-20 13:04  杭州胡欣  阅读(1653)  评论(0编辑  收藏  举报