patterns/strategy.dart

49 lines
1.9 KiB
Dart
Raw Permalink Normal View History

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