Mixin官方介绍
官方介绍: Mixins are a way of defining code that can be reused in multiple class hierarchies. They are intended to provide member implementations en masse.
Google翻译: Mixin 是一种定义可在多个类层次结构中重用的代码的方法。它们旨在集体提供成员实现
维基百科
mixin 与 接口的区别
接口更多的是定义一种规范,抽象了某些能力,强调 is的关系,而mixin 更多的是通过组合提供给一个不相关的组件相应的能力,强调的是able
怎么使用mixin
- 创建混入类
- 子类使用with 关键词进行混入
示例:
// 创建混入类A
mixin A{
}
// 使用关键字with 将A混入 B
class B with A{}
mixin 使用on 关键字限制混入范围
mixin A on C {
@override
void init() {
print("A init");
}
}
mixin B on C {
@override
void init() {
print("B init");
}
}
class C {
void init() {
print("C init");
}
}
class D extends C with A, B {}
mixin class
mixin class A
同时使用 mixin class 关键字修饰类,那么这个类既不能使用类的特性,例如extends 也不能使用mixin的特性,例如 with
mixin 多混入 优先级
mixin A {
void init(){
print("A init");
}
}
mixin B {
void init(){
print("B init");
}
}
mixin C {
void init(){
print("C init");
}
}
class D with A,B,C{}
void main(){
D d = D();
d.init();
}
打印结果: C init
也就是说,使用多混入,后面的mixin同名方法会覆盖前面的方法
mixin 在Flutter页面中的使用,抽取公共推荐页面
场景: 商城App中可能多个页面再底部都会有同一部分推荐的网格列表,可以通过mixin 将推荐内容页面进行抽取,然后在 需要推荐内容的页面使用with 进行混入,使用RecommendMixin中的内容
具体详细看代码实现