什么是Mixin
mixin实际是mix in这个短语,即混⼊的意思。在⽹上⼀通百度,感觉下⾯⼀些话说得挺在理:小时代演员表及照片
mixin 其实就是在语⾔不提供标准多重继承的情况下,变相实现多重继承的⼀个语法糖。不同版本的 mixin 实现不太⼀样,但出发点都是在允许继承接⼝和继承实现的基础上,简化继承关系,避免多重继承的坑。
Mixin是⼀种特殊的多重继承,也就是多重继承的⼦集。使⽤Mixin的好处是,同时享有单⼀继承的单纯性和多重继承的共有性。
作为Mixin类,需要满⾜以下条件:
不能单独⽣成实例对象,属于抽象类。苏见信的女儿
不能继承Mixin以外的类。
送什么礼物给男朋友因为有以上限制,Mixin类通常作为功能模块使⽤,在需要该功能时“混⼊”,⽽且不会使类的关系变得复杂(⽐如,同名⽅法到底从哪个⽗类继承)。黄奕老公是谁
Mixin 实质上是利⽤语⾔特性来更简洁地实现组合模式。
看了以上这些话,结合个⼈理解Mixin的概念其实挺简单,它本质上就是⼀种编程模式,当我们需要完成⼀些特定功能的时候,发现这些功能通过继承⼀些类或者组合⼀些类,通过各种机制把这些类中的功能进⾏混合加⼯。然后就能够完成特定的功能。把这样的封装以Mixin类的⽅式对外暴露,这时就可以引⼊这样⼀种 “混⼊”的编程思想,它的名字就叫Mixin。芈月传定妆照
下⾯是⼀些参考链接:
演员郭晓冬以上是本⼈2018年的理解,感觉还是有点隔靴挠痒似懂⾮懂的感觉。近⼆三年随着功⼒的提升,下⾯重新说下对Mixin 的认识:
Mixin是⼀种编程模式, 笼统地说就是综合多个类的功能产⽣⼀个类,但不⽤多继承。如果说得更直⽩⼀点,就是把原先多个类中的某些功能,为了使⽤上的⽅便合并到⼀个类中。
⽐如原先有⼗个类,每个类中有⼀堆的⽅法,现在需要实现⼀个新功能,可能类A中需要⼀到⼆个⽅法,类B中需要⼏个⽅法,以此类推,这样原先可能要继承或依赖那⼗个类中的部分⽅法才能完成这个新功能,但现在通过Mixin模式,可以基于这⼗个类搞出⼀个新的类来,这个新类⾥⾯有原先散落在⼗个类中我们想要的⽅法。这样实现新功能时只要依赖⼀个类就可以了 , 可以减少过多代码的⼲扰。
那么这个新类就称之为Mixin类,⽽搞出这个Mixin类的⽅式或代码实现套路就称之为Mixin设计模式。为什么这个设计模式在JS中得到⼴泛应⽤呢?因为在JS语⾔中有⼀个
prototype(原型对象)的概念,借助这个prototype可以⽅便的完成这个事。不过⽤java语⾔也是可以完成的,⽐如上⾯的例⼦,我们借助AOP技术,就完全可以根据⼗个类产⽣我们想要的⼀个新的代理类来实现Mixin