美文网首页
深入理解Dart之Mixins

深入理解Dart之Mixins

作者: Jotyy | 来源:发表于2020-01-10 09:47 被阅读0次

在面向对象的世界中,我们最熟悉的莫过于classabstract classinterface。Dart作为一门现代面向对象编程语音,在原有的特性基础上,新增了一些新的特性,今天我们就来聊聊 Mixins

什么是Mixins

在官方文档中,我们可以看到对Mixins的解释是:

Mixins are a way of reusing a class’s code in multiple class hierarchies.

简单的理解,就是用来复用多个类之间的代码,减少耦合。我们直接来看一个例子。

没有Mixins的从前

假设,我们现在正在开发一个动物大全App,我们需要创建一个Duck类。作为一个有丰富面向对象编程经验的开发者,你自然的将所有和Duck有相似特征的抽取成一个abstract class。

/// Bird
abstract class Bird {
    void shout() {
        println('shouting');
    }
}

/// WaterborneBird
abstract class WaterborneBird extends Bird {
    void swim() {
        println('swimming');
    }
}

/// Duck
class Duck extends WaterborneBird {
    void doDuckThings() {
        shout();
        swim();
        println('quack quack quack!')
    }
}

很好,我们清楚的将鸭子归入水中生活的鸟类,加入其它的鸟类也变得非常容易。但是,现在我们需要加入金鱼了,于是我们和上面一样编写代码。

/// Fish
abstract class Fish {
    void swim() {
        println("swimming")
    }
}

/// GoldFish
class GoldFish extends Fish {
    void doGoldFishThings() {
        swim();
        pringln('zzz...');
    }
}

这是我们发现金鱼和鸭子一样拥有swim的特性,在这个例子中是非常简单的,但是如果我们有复杂的行为需要赋予给一个新的类,我们就要大量编写重复的代码了。

使用Mixins

我们声明一个Swimming的mixin:

mixin Swimming {
    void swim() {
        println('swimming')
    }
}

我们可以使用with关键字将mixin加入到class中,其实看到这里你可能已经回想到我们其实可能已经用过这个with关键字了。接下来,我们就可以对上面的代码进行改造了:

/// Bird
abstract class Bird {
    void shout() {
        println('shouting');
    }
}


/// Duck
class Duck extends Bird with Swimming {
    void doDuckThings() {
        shout();
        swim();
        println('quack quack quack!')
    }
}
/// Fish
abstract class Fish {

}

/// GoldFish
class GoldFish extends Fish with Swimming {
    void doGoldFishThings() {
        swim();
        pringln('zzz...');
    }
}

另外,你可以将多个mixins放入同一个类中,而且dart对这个数量没有作任何限制。

其它

关于Mixins,还有很多需要注意的事情,我们虽然可以使用Mixins对代码进行一些简化,但是要建立在对需求和类之间的关系准确理解的基础上。建议多去看看Flutter中使用Mixins实现的一些源码,从里面吸取一些正确的经验。

相关文章

  • 深入理解Dart之Mixins

    在面向对象的世界中,我们最熟悉的莫过于class、 abstract class和interface。Dart作为...

  • Flutter/Dart - Dart中一个类实现多个接口 以及

    Dart中implements实现多个接口 Dart中的mixins 使用 mixins的中文意思就是混入,就是在...

  • Dart mixins

    Dart中可以使用minxins多重继承的功能 minxins的使用条件, 随着Dart版本一直在变,这里讲的是D...

  • Mixins in Dart

    官方文档如此描述Dart语言: Dart is an object-oriented language with ...

  • Dart中一个类实现多个接口以及Dart中的Mixins

    一个类实现多个接口 Dart中的Mixins mixins的中文意思是混入,就是在类中混入其他功能。 在Dart中...

  • Dart学习笔记4 - Mixins理解

    今天应做的事没有做,明天再早也是耽误了。——裴斯泰洛齐 当我第一次接触Mixin的概念的时候,我是很茫然的,因为我...

  • 深入理解Dart Mixin

    假设我们需要实现一个动物世界的功能。Animal作为基类派生出哺乳类、鸟类、鱼类三种类型,各个类型又能派生出具体的...

  • Dart中的mixins

    视频地址https://www.bilibili.com/video/av52490605?p=12 mixins...

  • Dart:什么是mixins?

    在开发flutter项目的时候,发现mixins对于我来说是一个新的概念。在项目中是常用到的,比如Automati...

  • Dart新特性-Mixins

    注意: Mixsins类型是什么?

网友评论

      本文标题:深入理解Dart之Mixins

      本文链接:https://www.haomeiwen.com/subject/wrlpactx.html