81 lines
1.7 KiB
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();
|
|
}
|
|
|
|
/*
|
|
Проснулся и иду на кухню.
|
|
Готовлю кофе...
|
|
Перемалываю кофейные зерна!
|
|
Заполняю кофе машину!
|
|
Включаю кофе машину!
|
|
Кофе варится!
|
|
Получаю готовый кофе!
|
|
Пью кофе!
|
|
*/
|