Warstwa abstrakcji i poziom pośrednictwa to odrębne pojęcia. Abstrakcja to agregacja i znaczące nazewnictwo szeregu elementów, takich jak fragmenty danych lub instrukcji programu, na przykład koncepcja wywołania pliku lub metody, natomiast pośrednictwo to oddzielenie jednostek w celu ułatwienia odroczenia realizacji ich relacji, na przykład użycie JNDI do oddzielenia identyfikacji zasobu w programie od rzeczywistego zasobu, który może być ostatecznie dostarczony przez kontener aplikacji.
Często koncepcje idą w parze, a to, które stosuje się do konkretnego konstruktu, zależy od tego, jakie ćwiczenie lub dyskusja jest w toku. Na przykład abstrakcyjny charakter interfejsu jest ważny podczas uczenia się lub dokumentowania API; jego właściwość pośrednia jest ważna podczas dodawania rozszerzalności lub tworzenia testów dla aplikacji.
Warstwa abstrakcji jest agregacją abstrakcji i daje im konceptualną integralność i spójność użytkowania. CreateProcess to nazwa interfejsu API win32 dla zestawu kodu, który buduje i wykonuje proces. „Nazwa” ma znaczenie w tym kontekście, ponieważ jeśli nazwiemy funkcję coś takiego jak DoAllocMemThenMakeEnvThenFindEntryPoint ... to naprawdę nie byłby bardzo abstrakcyjny. Warstwa, taka jak Win32 API, stanowi barierę, przez którą programiści mogą nie być zapuszczani. Usuwa złożoność z punktu widzenia dzwoniącego kosztem zmniejszenia mocy (elastyczność, wydajność itp.). Ten kompromis jest podkreślany przez częste dyskusje na temat nieszczelnych abstrakcji: może być konieczne wykonywanie bezpośrednich wywołań SQL podczas korzystania z Hibernacji lub wywoływanie Win32 podczas korzystania z .NET.
Jeśli chodzi o pośrednictwo, większość nietrywialnych programów działa z pewną formą pośrednictwa kodowanego przez użytkownika, o czym świadczy sekcja WEJŚCIA-WYJŚCIA COBOL-a sprzed arki. Podczas uzyskiwania dostępu do zasobu, takiego jak baza danych, możemy zobaczyć osadzenie ciągu połączenia JDBC w kodzie jako pośredni Poziom 0, połączenie JNDI (które deleguje wybór zasobu do kontenera aplikacji) jako Poziom 1 i niektóre konstrukcje Spring, które odwzorowują identyfikator JNDI aplikacji dla jednego z wielu zasobów kontenera jako Poziom 2. Wiele poziomów pozwala wielu stronom zewnętrznym na relację (w tym przypadku relację między wykonaniem kodu a bazą danych) na manipulowanie tą relacją. Dotyczy to również wewnętrznych składników programu, takich jak interfejsy i zdarzenia.
Widzimy, że bez względu na ich inne cechy abstrakcja zmniejsza złożoność, a pośrednia ją zwiększa. Abstrakcja zmniejsza moc, podczas gdy pośrednictwo ją zwiększa. Pośredni może być użyty do przywrócenia mocy abstrakcji poprzez umożliwienie zastąpienia domyślnego zachowania niestandardowymi wywołaniami zwrotnymi.