• 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);
    }
  • 相关阅读:
    爬虫基本库request使用—爬取猫眼电影信息
    Linux系统下Mysql安装与配置
    Centos7安装配置Nginx
    VUE中使用geetest滑动验证码
    python中使用redis发布订阅者模型
    Django中使用极验Geetest滑动验证码
    Redis的常见用法
    微信服务号消息推送
    Python支付宝在线支付API
    Django Rest Framework(二)
  • 原文地址:https://www.cnblogs.com/Answer1215/p/11409024.html
Copyright © 2020-2023  润新知