Мы имеем код клиента, ожидающий определенных от объекта определенных качеств (порт Lightning), но также мы имеем другой объект под названием adaptee (ноутбук на Windows), который предоставляет тот же функционал, но через другой интерфейс (USB порт).
В такой ситуации нам подойдет паттерн Адаптер. Мы создадим структуру adapter, которая будет:
Реализовать тот же интерфейс, который ожидает клиент (порт Lightning).
Переводить запрос от клиента к адаптируемому объекту в форме, которую он ожидает. Адаптер принимает коннектор Lightning, после чего переводит его сигналы в формат USB в ноутбуке на Windows.