Найти тему

Примеси Mixins в Dart

Примесь, или Mixin в языке Dart – это класс, описывающий некоторое поведение. Он чем-то напоминает интерфейс, однако правила его использования несколько отличаются. Примеси не наследуются, а как бы подключаются, «примешиваются» к коду класса, поэтому и называются примесями. Отличие от интерфейса в Java заключается в том, что методы примеси уже не надо переопределять.

Посмотрим на примере. Предположим, нам нужно описать музыканта, который умеет играть разные стили музыки.

// некий абстрактный музыкант. Скрытый интерфейс содержит метод play()
class Musician {
// В интерфейсе
final instrument;

// Не в интерфейсе - это конструктор
Musician(this.name);

// В интерфейсе
void play() => 'Hi, I can play $instrument';
}

class Guitarist implements Musician with Jazz, Rock, Funk {
get name => 'Guitar';
void play(String arg) => 'Hi, I can play $arg by $instrument';
}

Гитарист (Guitarist) имплиментирует Музыканта (Musician) и умеет играть разные стили. А вот как раз стили мы опишем как примеси:

// примесь Rock

mixin Rock {

bool knowsHowToPlayACDC = true;

void playPopMusic(){

if(knowsHowToPlayACDC){

play("TNT")

}

}

}

// примесь Jazz

mixin Jazz {

bool knowsHowToPlayEllington = true;

void playJazzMusic(){

if(knowsHowToPlayEllington){

play("Take the A Train")

}

}

}

// примесь Funk

mixin Funk {

bool knowsHowToPlayBrown = true;

void playFunkMusic(){

if(knowsHowToPlayBrown){

play("I FEEL GOOD!")

}

}

}

Таким образом, мы примешали стили музыки в виде примесей к классу музыканта, тем самым расширив его функциональность.