美文网首页
dart小知识--迷信?

dart小知识--迷信?

作者: RidingWind2023 | 来源:发表于2019-08-05 10:30 被阅读0次

    相信看过flutter代码的小伙伴肯定都见过这个词, mixin , 迷信, 没想到堂堂google也有会汉语拼音的程序员。
    但转念一想又不对啊,肯定有玄机。果不其然,是拆开念, mix , in。是dart为了解决多继承而设计的。

    举一个例子,我们把才艺作为一项能力,书法、乐器、唱歌都是子能力。
    我们把 人作为一个基类, 程序员、 销售作为子类,他们都可以自由组合才艺。
    比如销售 会 乐器、唱歌, 程序员会书法,按照java 最传统的实现是如下结构 :

    Mixin.png

    这里有个问题是,程序员和销售都要实现一次唱歌这个接口中唱歌方法,尽管一模一样。
    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;
      }
    }
    

    相关文章

      网友评论

          本文标题:dart小知识--迷信?

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