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