patterns/facade.dart

81 lines
1.7 KiB
Dart

//позволяющий скрыть сложность системы путём
//сведения всех возможных внешних вызовов к одному объекту,
//делегирующему их соответствующим объектам системы.
class Grinder {
String _type;
Grinder(this._type);
void grind() {
print("Перемалываю $_type!");
}
}
class Maker {
String _type;
Maker(this._type);
void fill() {
print("Заполняю $_type машину!");
}
void retrieve() {
print("Получаю готовый $_type!");
}
void start() {
print("Включаю $_type машину!");
}
}
class Human {
String _beverage;
Human(this._beverage);
void drink() {
print("Пью $_beverage!");
}
}
class MorningFacade {
final _coffeeDrinker = Human("кофе");
final _coffeeGrinder = Grinder("кофейные зерна");
final _coffeeMaker = Maker("кофе");
void prepareCoffee() {
print("\r\Готовлю кофе...");
_coffeeGrinder.grind();
_coffeeMaker
..fill()
..start();
print("Кофе варится!");
}
void drinkCoffee() {
_coffeeMaker.retrieve();
_coffeeDrinker.drink();
}
}
void main() {
var typicalMorning = MorningFacade();
print("Проснулся и иду на кухню.");
typicalMorning.prepareCoffee();
typicalMorning.drinkCoffee();
}
/*
Проснулся и иду на кухню.
Готовлю кофе...
Перемалываю кофейные зерна!
Заполняю кофе машину!
Включаю кофе машину!
Кофе варится!
Получаю готовый кофе!
Пью кофе!
*/