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);
    }
  • 相关阅读:
    oc基础第二天类与对象---1复习代码
    oc基础第二天类与对象---1复习
    oc基础第一天---类的方法,类与对象
    oc基础第一天---类与对象
    oc基础第一天---面向过程与面向对象
    oc基础第一天---c语言和oc语言的对比
    oc基础第一天---c语言与oc语言对比
    第一阶段c语言结晶说明
    mvc 使用json.net 替换JsonResult 默认序列化
    Mvc ModelBinder 一对多自定义数据格式 post提交
  • 原文地址:https://www.cnblogs.com/Answer1215/p/11409024.html
Copyright © 2011-2022 走看看