49 lines
1.9 KiB
Dart
49 lines
1.9 KiB
Dart
//предназначенный для определения семейства алгоритмов,
|
||
//инкапсуляции каждого из них и обеспечения их взаимозаменяемости.
|
||
//Это позволяет выбирать алгоритм путём определения соответствующего класса
|
||
|
||
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");
|
||
}
|
||
|
||
/*
|
||
Меня зовут Андрей. Я сейчас пью Латте с Итальянскими кофейными зернами!
|
||
Меня зовут Никита. Я сейчас пью Американо с Итальянскими кофейными зернами!
|
||
Меня зовут Олег. Я сейчас пью Эспрессо с Итальянскими кофейными зернами!
|
||
*/
|
||
}
|