Каково различие между 'Абстракцией' и 'Фасадом'?
Существует ли различие вообще? Или действительно ли условия являются взаимозаменяемыми?
Паттерн фасада представляет собой упрощенный интерфейс для более крупной, возможно, более сложной кодовой базы. Кодовая база может быть одним классом или несколькими. Фасад просто дает вам простой интерфейс.
Абстракция используется для представления концепции, но не для привязки к какому-либо конкретному экземпляру. (Т.е. абстрактный класс). Это не означает упрощения (как это делает паттерн фасада), а скорее создание «общего» интерфейса или представления.
Фасад - это особый шаблон проектирования, предназначенный для скрытия внутреннего содержимого пакета / модуля от его клиентов за четко определенным интерфейсом. Обычно он скрывает несколько интерфейсов / классов за одним общим, отсюда и его название.
«Абстракция» - это общий термин, означающий скрытие конкретных деталей чего-либо от внешнего мира.
Таким образом, эти два термина не взаимозаменяемые.
Фасад - это очень специфический шаблон проектирования GoF. По сути, речь идет о сокрытии слишком сложной функциональности от основной части вашего приложения.
Абстракция - это более расплывчатый термин, связанный с сокрытием функциональности службы от ее клиента.
Абстрактный для меня означает взять общие части коллекции вещей и создать из них базовую вещь, на которую потом может опираться коллекция, что-то вроде родительского класса.
Фасад - это лицо (буквально говоря), поэтому аналогия с базовым классом не совсем подходит. Фасад - это скорее интерфейс, поэтому он не должен быть связан с тем, что его использует. Я думаю о нем скорее как о маске. Например, у моего класса будет "одноразовая" маска.
Так что разница, на мой взгляд, в том, что абстрактный паттерн позволяет выстроить иерархию, в то время как паттерн фасада позволяет классам выглядеть одинаково.