Dart系列 --- Dart中的Mixins

Mixins 是 Dart 中用于代码重用的一种机制,它允许类从多个源获取行为,而无需传统的继承关系。在没有 Mixins 的情况下,类必须通过继承来获得所需的方法,导致复杂的继承层次和代码耦合。使用 Mixins,类可以简单地通过 `with` 关键字组合多个 Mixins,从而减少冗余代码并降低耦合度。例子中展示了如何使用 Mixins 让 `Man` 和 `OrangeCat` 类同时拥有 `Anima` 类的 `eat` 方法,而无需它们直接继承 `Anima`。这显著简化了类结构并提高了代码的可维护性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是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后,多个不同层次之前不在拥有复杂的继承关系,但是它们可以拥有共同的方法,很大程度上减少了代码耦合的问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值