什么是Mixins
官方的解释:
Mixins are a way of reusing a class’s code in multiple class hierarchies.
Mixin 是一种在多个类层次结构中重用类代码的方法。
- 作为mixins的类只能继承自Object,不能继承自其他类
- 作为mixins的类不能又构造函数
- 一个类可以mixins多个mixins类
- mixins不是继承也不是接口,而是dart一种全新的特性
没有mixins之前
abstract class Anima {
void eat() {
print('吃东西');
}
}
abstract class People extends Anima {
void say() {
print('我可以说话');
}
}
class Man extends People {
void fight() {
eat();
say();
print('男人之间的战争');
}
}
abstract class Cat {
void jump() {
print('跳跃');
}
}
class OrangeCat extends Cat {
void fat() {
jump();
print('橘猫很胖');
}
}
有一个动物父类,拥有eat方法,
People类下面的子类,想要拥有eat方法,People就必须继承Anima类
Cat类没有继承Anima类,但是Anima中的eat是猫也有的特性。
所以Cat类也必须继承Anima
通过上面的例子可以看到每个物种都有动物特性,而每个动物下的分支,想要拥有动物的特性,就必须的无限继承下去。
遇到复杂的问题,会产生大量重复无用代码,并且高度耦合。
Mixin 是一种在多个类层次结构中重用类代码的方法。
mixin的出现正是用来解决这一问题
mixin Anima {
void eat() {
print('吃东西');
}
}
abstract class People {
void say() {
print('我可以说话');
}
}
class Man extends People with Anima {
void fight() {
print('男人之间的战争');
eat();
say();
}
}
abstract class Cat {
void jump() {
print('我要跳跃');
}
}
class OrangeCat extends Cat with Anima {
void fat() {
eat();
jump();
print('橘猫很胖');
}
}
有了mixin之后,我们可以看到People,Cat不在继承Anima,但是通过mixins它们的子类都可以拥有Anima的方法
拥有了mixins后,多个不同层次之前不在拥有复杂的继承关系,但是它们可以拥有共同的方法,很大程度上减少了代码耦合的问题