Я попытаюсь объяснить это простыми словами, без особой формальности.
Представьте, что у вас есть некоторые доменные классы, и из пользовательского интерфейса вы хотите с ними взаимодействовать. Фасад можно использовать для предоставления функций, которые можно вызывать из уровня пользовательского интерфейса, чтобы уровень пользовательского интерфейса не знал ни о каких классах домена, кроме фасада. Это означает, что вместо вызова функций в классах домена вы вызываете одну функцию из фасада, которая будет отвечать за вызов необходимых функций из других классов.
Адаптер, с другой стороны, может использоваться для интеграции других внешних компонентов, которые могут иметь ту же функциональность, что и вам, но их функции не называются совершенно одинаково. Скажем, у вас есть класс Car
в вашем домене, и вы работаете с внешним поставщиком автомобилей, у которого также определен класс автомобилей. В этом классе у вас есть функция car.getDoors()
, но у внешнего поставщика есть эквивалент car.getNumDoors()
. Вы не хотите менять способ вызова этой функции, поэтому вы можете использовать класс адаптера для обёртывания внешнего класса Car, чтобы вызов getDoors()
адаптера был делегирован getNumDoors()
внешнего класса.