Rozhraní - abstraktní třída - neabstraktní třída

Viz demo searching pro BlueJ:

Rozhraní - specifikuje, co má prohledávač umět

Searcher

Abstraktní třída - předek konkrétních plných implementací prohledávače

AbstractSearcher

Konkrétní třída - plná implementace prohledávače

LinearSearcher