zoukankan      html  css  js  c++  java
  • Define Interfaces and Share Class Members through Mixins in Dart

    In this lesson, we will cover Interfaces and Mixins. Interfaces act as a contract containing properties and methods that a class must define once it “implements” this interface. Mixins are Dart’s way of sharing properties and methods from multiple classes, since by design Dart adopts a single-inheritance model.

    Abstract class:

    void main() {
      var pixel = Phone('Pixel XL', 'HTC');
      pixel.getDeviceInfo();
    }
    
    abstract class Device {
      String name;
      String manufacturer;
      void getDeviceInfo();
    }
    
    class Phone implements Device {
      String name;
      String manufacturer;
      
      void getDeviceInfo() => print('''
      ===
      Device name: $name
      Manufactured by: $manufacturer
      ''');
      
      Phone(this.name, this.manufacturer);
    }
    

      

    Define a mixin:

    mixin FeaturesMixin {
      bool blueTooth = true;
      bool dualSim = false;
      bool nfc = true;
    }

    Extends a mixin:

    // Extends FeaturesMixin
    mixin UtilitiesMixin on FeaturesMixin {
      bool calculator = true;
      bool flashlight = true;
      bool thermometer = false;
      
      String _has(bool feat) => feat ? 'Yes': 'No';
      
      void getAllFeatures() => print('''
      --FEATURES--
      
      Bluetooth: ${_has(super.blueTooth)}
      Dual SIM: ${_has(super.dualSim)}
      NFC: ${_has(super.nfc)}
      Calculator: ${_has(calculator)}
      Flashlight: ${_has(flashlight)}
      Thermometer: ${_has(thermometer)}
      ===
      ''');
    }

    use Mixin:

    class Phone with FeaturesMixin, UtilitiesMixin implements Device {

    --

    void main() {
      var pixel = Phone('Pixel XL', 'HTC');
      pixel.getDeviceInfo();
      pixel.getAllFeatures(); 
    /*
    
      ===
      Device name: Pixel XL
      Manufactured by: HTC
      
      --FEATURES--
      
      Bluetooth: Yes
      Dual SIM: No
      NFC: Yes
      Calculator: Yes
      Flashlight: Yes
      Thermometer: No
      ===
      
    */
    }
    
    mixin FeaturesMixin {
      bool blueTooth = true;
      bool dualSim = false;
      bool nfc = true;
    }
    
    // Extends FeaturesMixin
    mixin UtilitiesMixin on FeaturesMixin {
      bool calculator = true;
      bool flashlight = true;
      bool thermometer = false;
      
      String _has(bool feat) => feat ? 'Yes': 'No';
      
      void getAllFeatures() => print('''
      --FEATURES--
      
      Bluetooth: ${_has(super.blueTooth)}
      Dual SIM: ${_has(super.dualSim)}
      NFC: ${_has(super.nfc)}
      Calculator: ${_has(calculator)}
      Flashlight: ${_has(flashlight)}
      Thermometer: ${_has(thermometer)}
      ===
      ''');
    }
    
    abstract class Device {
      String name;
      String manufacturer;
      void getDeviceInfo();
    }
    
    class Phone with FeaturesMixin, UtilitiesMixin implements Device {
      String name;
      String manufacturer;
      
      void getDeviceInfo() => print('''
      ===
      Device name: $name
      Manufactured by: $manufacturer
      ''');
      
      Phone(this.name, this.manufacturer);
    }
  • 相关阅读:
    【IDEA】项目最好强制 utf-8,换行符强制 Unix格式,制表符4个空格
    【Maven】有关 snapshots、releases 的说明
    【Maven】与私服有关的本地操作(上传、拉取jar包;版本发布)
    【Maven】nexus 安装(基于docker)
    【Maven】maven命令(编译、打包、安装、发布)区别
    【Linux、Centos7】添加中文拼音输入
    生成器、列表推导式、生成器表达式
    列表:python基础数据类型
    数据类型之间转化、字符串学习
    while 循环、格式化输出、运算符
  • 原文地址:https://www.cnblogs.com/Answer1215/p/11409024.html
Copyright © 2011-2022 走看看