Предыдущие части: ПабСаб, Наблюдатель, Визитёр, Фабрика, Синглтон, Стратегия, MVC, Вступление
Есть целая группа шаблонов, похожих друг на друга почти до неразличимости. Мы попробуем разобраться с этой группой и выяснить, что к чему, и почему их так много. И начнём с Фасада.
Facade
Здесь всё просто – шаблон называется Фасад и делает именно то, что делает фасад – предоставляет красивый интерфейс для доступа к страшному функционалу.
Какая задача решается
В некоторых случаях вы можете столкнуться с плохо написанным легаси-кодом. Этот код требуется расширить новым функционалом, который дальше тоже будет расширяться. Но переписывать его с нуля или проводить рефакторинг будет слишком затратно, поэтому мы поступаем так:
Собираем методы этого кода и прячем их за интерфейсом, который уже принадлежит новому функционалу и который можно в дальнейшем расширять.
Всю старую помойку мы прячем за новым и чистеньким фасадом, работать с которым существенно проще (если не проще, то это уже не фасад).
В других случаях это может быть некая сложная система. Скажем, она состоит из памяти, жесткого диска, базы данных и т.д. И чтобы получить из неё какую-то нужную информацию, нужно прочитать файл, сделать какие-то действия в памяти, обратиться к базе, послать запрос в интернет и т.д.
Все эти действия тоже можно спрятать за фасад, у которого будет простой метод для получения информации.
Также есть случаи, когда требуется интегрировать вместе несколько служб. Например, шлюзы платёжных систем: Киви, Сбер, Яндекс и т.д. В каждом шлюзе есть своё API.
Или другой вариант: нужно интегрировать в свою программу внешнюю библиотеку, исходного кода которой у вас нет.
Всё это тоже можно спрятать за фасадом, который будет иметь универсальный метод для отправки платежа или для обращения к библиотеке.
Практическая реализация
Здесь собственно не о чем говорить. Шаблон реально простой и не имеет подводных камней. Вы просто делаете класс с нужными вам методами, а в этих методах реализуете работу со сложным или устаревшим функционалом, который вам надо спрятать.
И фасад становится единственной точкой соприкосновения со спрятанным кодом. Используя его, вы можете быть уверены, что программа нигде больше не зависит от спрятанного кода.
Главное – не написать потом ещё один фасад для старого фасада :)
Читайте дальше: