В чем разница между шаблонами делегирование, фасад, интерфейс?

Изучаю шаблоны проектирования применительно к PHP.
Шаблоны - делегирование, фасад, интерфейс.

Ссылки на шаблоны из Википедии:
Шаблон интерфейс

Шаблон делегирования

Фасад (шаблон проектирования)

Смотрел видеоролики по шаблонам проектирования - особой разницы в шаблонах выше не увидел.
Аналогично и в PHP коде примеров. Что делегирование, что фасад просто вызывают/используют другие классы, объекты, скрывают их сложность, предоставляют удобный интерфейс доступа.
Автор роликов утверждает, что интерфейс - это класс шаблонов и определение в Википедии не верно.

В чем разница между шаблонами делегирование, фасад, интерфейс?

PS
Дополнительно поискал информацию о шаблонах, паттернах в других источниках.
Их количество разное, их названия разные, где то их больше, где то меньше.
Например на https://refactoring.guru/ru/design-patterns/catalog
нет шаблонов - пул одиночек, ленивая загрузка, канал событий, статическая фабрика, простая фабрика, контейнер свойств и т.д.
Я не говорю о разной реализации шаблона - это нормально, я говорю о разном количестве, названиях и т.д.
Есть подозрение, что каждый программист выдумывает свой шаблон, на основе базовых....
  • Вопрос задан
  • 148 просмотров
Пригласить эксперта
Ответы на вопрос 2
mayton2019
@mayton2019
Bigdata Engineer
Могу рассказать насчет фасада. Это - самый простой шаблон. Если у тебя есть некая сложная задача и ее надо сводить к вызову 1 метода - то это фасад. Например для С++ языка - main функция является "фасадом". А консольные параметры - это как-бы аргументы к функциям фасада. PHP скрипт тоже является фасадом а параметризируется через параметры URL.
Ответ написан
Комментировать
Adamos
@Adamos
Не очень владею терминологией паттернов, но предположу, раз больше желающих нет.

Фасад скрывает от использующего нюансы реализации. Например, в Laravel используется фасад DB, который позволяет просто отправить SQL-запрос к таблице в подключенной к Ларавели БД. Используя DB, нужно знать только поля этой таблицы. Как она подключена, на каком движке - SQLite/MySQL/Postgres/etc, логины-пароли - все это остается за фасадом.

Делегирование разбирается с логикой. У вас есть какая-то наружная логика, простая и понятная. Как она реализуется уровнем ниже, какие там вызываются классы и методы и почему - скрыто за внешней простотой.

Интерфейс делает примерно то же самое, но с разбивкой на конкретные (возможно, необходимые для каких-то внешних связей) методы. Которые могут не иметь ничего общего с внутренней работой кода, но предоставляют вам возможность работать с ним так, как описано этим интерфейсом.

Все три паттерна скрывают реализацию за упрощенной внешностью, разница в том, что и зачем видит использующий эту внешность. В конкретном случае может быть трудно отделить одно от другого, но это никому и не нужно. Важно понимать сам прием такого управления сложностью.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы