Когда нужна Strategy?Когда клиент должен выбирать алгоритм под одним договором: например, стоимость доставки. Для единственного простого варианта отдельная иерархия может быть лишней.
Чем Adapter отличается от Decorator?Adapter переводит один интерфейс в другой. Decorator сохраняет договор оборачиваемого объекта и добавляет поведение. Название «wrapper» не объясняет цель. GoF: Adapter.
Почему by-делегат не вызывает override обёртки из своего метода?Внутренний вызов остаётся вызовом на объекте-делегате. Обёртка не подменяет его this. Для нужного поведения переопределите внешний метод явно. Делегирование Kotlin.
Почему порядок Retry и Logging влияет на число логов?Если Logging пишет на каждый вызов, внешняя обёртка увидит одну операцию, внутренняя — каждую попытку Retry. Это анализ конкретного договора обёрток, не универсальная гарантия любого логгера.
Даёт ли Command автоматический undo отправленного письма?Нет. Представление действия объектом не делает внешний эффект обратимым. Нужен поддержанный системой компенсирующий сценарий; удаление локальной команды не отменяет доставку.
Делает ли Kotlin object его изменяемые поля потокобезопасными?Нет. Создание singleton и согласованное изменение его данных — разные задачи. Нужны неизменяемость, ограничение владельца или синхронизация. Shared mutable state.