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);
    }
  • 相关阅读:
    CodeForces:847D-Dog Show
    CodeForces 699C
    CodeForces:699B-One Bomb
    哈夫曼树:HDU5884-Sort(队列、哈夫曼树)
    Educational Codeforces Round 31- D. Boxes And Balls
    经典:区间dp-合并石子
    Codeforces Round #879 (Div. 2) C. Short Program
    卡顿
    异常断点
    自动布局
  • 原文地址:https://www.cnblogs.com/Answer1215/p/11409024.html
Copyright © 2011-2022 走看看