Что такое паттерн фасад Java

Что такое паттерн фасад JavaКнига GoF описывает этот паттерн как предоставляющий унифицированный интерфейс к множеству интерфейсов в некоторой подсистеме. Книга «Паттерны проектирования» дает это же толкование и обращает внимание, что, скрывая слож­ность подсистемы, паттерн «Фасад» в то же время предоставляет все возможности подсистемы через удобный для использования интерфейс.

Для простого практического примера того, как работает паттерн «Фасад», пред­ставьте стиральную машину со всего лишь двумя режимами стирки: для сильно загрязненного белья и для слабо загрязненного.

Для каждого режима стиральная машина должна выполнить предопределенный набор операций: установить темпе­ратуру воды, нагреть воду, установить длительность цикла стирки, добавить сти­ральный порошок, добавить отбеливающее средство, добавить смягчитель ткани и т.д. Каждый режим требует различного набора инструкций по стирке (разное количество стирального порошка, более высокая/низкая температура, более долгий/короткий цикл отжима и т.д.).

Простой интерфейс предоставляет два режима стирки, скрывающих сложную логику выбора подходящей температуры воды, длительности отжима и цикла стирки, а также различные методики добавления стирального порошка, отбели­вающего средства или смягчителя ткани.

Пользователь стиральной машины не должен думать о сложной логике стирки вещей (выбирать температуру, длитель­ность цикла и т.д.). Единственное, что должен сделать пользователь — решить, сильно загрязнено белье или нет. В этом состоит сущность паттерна «Фасад» при­менительно к конструкции стиральных машин.

Паттерн «Фасад» обычно реализуется в следующих целях и случаях:

  • для обеспечения простого и унифицированного доступа к унаследованной системе управления производством;
  • для создания общедоступного API к таким классам, как драйвер;
  • для предоставления крупно-модульного доступа к доступным сервисам. Серви­сы сгруппированы как в вышеприведенном примере со стиральной машиной;
  • чтобы снизить количество сетевых вызовов. Фасад выполняет множество об­ращений к подсистеме, в то время как удаленный клиент должен выполнить одно-единственное обращение к фасаду;
  • для инкапсуляции последовательности выполняемых действий и внутренних деталей приложения, чтобы обеспечить простоту и безопасность.

Кстати, фасады также иногда реализуют как абстрактные фабрики-одиночки.

Диаграмма классов фасада. Как можно увидеть на диаграмме классов на рис.3.1, паттерн «Фасад» предоставляет простой интерфейс для базовой системы, инкап­сулируя сложную логику.

Что такое паттерн фасад JavaРис 3.1. Диаграмма классов паттерна «Фасад».