그림 4-1에서 MessageSender는 MessageRepository, UserDirectory, Bot 같은 안정적일 가능성이 높은 인터페이스에 의존한다. 이런 인터페이스는 저수준 코드에 의해 구현돼 실제 작업을 수행한다. 예를 들어 MessageRepository 인터페이스는 MessageHibernateRepository 클래스에 의해 구현되며, 이 MessageHibernateRepository 클래스는 하이버네이트(자바 영속성 프레임워크)를 사용해 데이터베이스에 접근한다. UserDirectory 인터페이스는 회사의 LDAP 서버에서 가져온 정보를 캐시하는 CachedLdapServer 클래스에 의해 구현된다. Bot 인터페이스는 API에 대한 HTTP 호출을 하는 HttpBot 클래스에 의해 구현된다. 이러한 구현 세부 사항은 저수준 클래스를 살펴봐야만 알 수 있다.
저수준 클래스가 작업을 수행하는 세부 구현은 MessageSender의 관심사가 아니다. MessageSender는 단지 Bot 인터페이스가 특정 사용자에게 마크다운 메시지를 보낼 수 있다는 사실만 알면 된다. MessageSender 인터페이스는 구현 세부 사항과 분리되어 있으며, 이것이 우리가 원하는 것이다.