> -- Alexey Veselovsky писал(а):
> Это не те интерфейсы.
Ну почему же не те:
## Код:
```
public interface IScanner {
    /**
     * Получение очередного токена.
     *
     * @return токен
     */
    Token getToken();

    /**
     * Сброс сканера в исходное состояние
     */
    void reset();
}
```


А дальше используем в коде
## Код:
```
public class Parser {
    private IScanner scanner;
    ...
    scanner.reset();
    ...
    Token token = scanner.getToken();
    ...
}
```


При этом можем иметь одну или несколько реализаций, которые пишем сами, либо кто-то пишет по указанному выше интерфейсу.

И эти реализации можно при желании менять на лету.