dart小知识--迷信?
2019-08-05 本文已影响0人
RidingWind2023
相信看过flutter代码的小伙伴肯定都见过这个词, mixin , 迷信, 没想到堂堂google也有会汉语拼音的程序员。
但转念一想又不对啊,肯定有玄机。果不其然,是拆开念, mix , in。是dart为了解决多继承而设计的。
举一个例子,我们把才艺作为一项能力,书法、乐器、唱歌都是子能力。
我们把 人作为一个基类, 程序员、 销售作为子类,他们都可以自由组合才艺。
比如销售 会 乐器、唱歌, 程序员会书法,按照java 最传统的实现是如下结构 :
这里有个问题是,程序员和销售都要实现一次唱歌这个接口中唱歌方法,尽管一模一样。
dart里面没有专门的接口关键字,但是类也可以作为接口来被实现,但是这么干和java没什么区别,那有没有办法把能力单独实现,而让程序员和销售都具备这种能力呢。答案就是Mixin。
Mixins
Mixin 是 一种解决方式,为了解决一个类的代码可以在多个类继承结构中复用。
由于dart是单继承的,mixin可以辅助来实现类似多继承的效果。
如何创建Mixin
要实现Mixin
,首先要创建一个继承自Object的类,并不要声明构造函数,并用 mixin
代替class
关键字
(如果你想把这个类当做普通类来使用,也可以不用mixin关键字而使用class关键字)。样例如下:
mixin Ability {
bool canSing = false;
bool canWrite = false;
bool canMusic = false;
void entertainMe() {
if (canSing) {
print('canSing');
} else if (canWrite) {
print('canWrite');
} else {
print('canMusic');
}
}
}
如何使用mixin
使用with
关键字, 后面可以跟 一个或者多个 mixin的类名,可以组合更多的能力。
class Person {
String name;
int age;
Person(this.name, this.age);
}
class Engineer extends Person with Ability/*后面可以跟多个mixin*/ {
Engineer(String name, int age) : super(name, age){
canSing = true;
canWrite = true;
}
}
class Seller extends Person with Ability/*后面可以跟多个mixin*/ {
Seller(String name, int age) : super(name, age){
canSing = true;
canMusic = true;
}
}