Есть некая служба (например, файлы).

Делается модуль (например, Files), в котором нет платформенно-зависимого кода. А объявлены абстрактные типы-интерфейсы. Конкретные их реализации засунуты в другой модуль, про который никто не знает (HostFiles, или там LinHostFiles, и т.п.). Важно понять, что не Files импортирует HostFiles, а наоборот: HostFiles импортирует Files. HostFiles реализует все абстракные типы ("классы" в привычных дельфистам терминах) и втыкает специальный объект-разъём, директорию: Files.dir. Через этот объект все обращения динамически перенаправляются модулю реализации. Таким образом, реализация подключается динамически, и даже может динамически без перезапуска программы меняться.

Почитайте учебник ББ раздел 3 "Приёмы проектирования".