patterns/strategy.dart

49 lines
1.9 KiB
Dart
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//предназначенный для определения семейства алгоритмов,
//инкапсуляции каждого из них и обеспечения их взаимозаменяемости.
//Это позволяет выбирать алгоритм путём определения соответствующего класса
abstract class CoffeeStrategy {
String announce(String roast);
}
class AmericanoStrategy implements CoffeeStrategy {
String announce(String roast) => "Американо с $roast кофейными зернами";
}
class LatteStrategy implements CoffeeStrategy {
String announce(String roast) => "Латте с $roast кофейными зернами";
}
class EspressoStrategy implements CoffeeStrategy {
String announce(String roast) => "Эспрессо с $roast кофейными зернами";
}
class CoffeeDrinker {
CoffeeStrategy preferredDrink;
String name;
CoffeeDrinker(this.name, this.preferredDrink);
}
void main() {
var americano = AmericanoStrategy();
var latte = LatteStrategy();
var espresso = EspressoStrategy();
var p1 = CoffeeDrinker("Андрей", latte);
var p2 = CoffeeDrinker("Никита", americano);
var p3 = CoffeeDrinker("Олег", espresso);
final String roastOfTheDay = "Итальянскими";
for (var person in [p1, p2, p3]) {
print(
"Меня зовут ${person.name}. Я сейчас пью ${person.preferredDrink.announce(roastOfTheDay)}!\r");
}
/*
Меня зовут Андрей. Я сейчас пью Латте с Итальянскими кофейными зернами!
Меня зовут Никита. Я сейчас пью Американо с Итальянскими кофейными зернами!
Меня зовут Олег. Я сейчас пью Эспрессо с Итальянскими кофейными зернами!
*/
}