Двухсторонние адаптеры - это адаптеры, которые реализуют оба интерфейса Target и Adaptee.Адаптированный объект может использоваться в качестве Target в новых системах, работающих с классами Target, или в качестве Adaptee в других системах, работающих с классами Adaptee.Если пойти дальше в этом направлении, у нас могут быть адаптеры, реализующие n интерфейсов, адаптирующиеся к n системам.Двусторонние адаптеры и n-way адаптеры сложно реализовать в системах, не поддерживающих множественное наследование.Если адаптер должен расширять класс Target, он не может расширять другой класс, например Adaptee, поэтому Adaptee должен быть интерфейсом, и все вызовы должны передаваться от адаптера объекту Adaptee.
Источник: http://www.oodesign.com/adapter-pattern.html