В конечном счете, ваша фаза проектирования должна быть выполнена до вашей фазы реализации независимо от того. Прежде чем вы начнете кодирование, вы должны иметь четкое представление о том, какие будут взаимодействия между вашими классами, и, надеюсь, ваши решения интерфейса будут очевидны из этого.
Однако, если вы уже написали класс и теперь необходимо реорганизовать его, чтобы иметь интерфейс, тогда имейте в виду, что интерфейс просто выбирает набор функций/методов, которые имеют общую цель, которая будет необходимых более чем одному классу. Если вы обнаружите, что есть несколько полезных функций с вашими другими классами, то эти методы будут хорошими кандидатами для интерфейса.
Другая часть интерфейсов, которая делает их действительно полезными, - если вы обнаружите, что есть определенные части вашего класса, которые не являются частными, но что вы хотите скрывать от некоторых других объектов, в этом случае вы можете выполнять функции вы хотите разоблачить и сделать их интерфейсом.
Я не согласен с тем, кто говорит, что вы не должны заранее проектировать. Кодеры все любят прыгать прямо в нее, а иногда и рефакторинг необходим, но сильный этап проектирования сэкономит вам огромное количество времени рефакторинга позже.
Да. У меня также намного лучшая удача, извлекая «интерфейсы» (в смысле Java) из существующих классов, чем я их проектирую. Но, с другой стороны, я всегда разрабатываю индивидуальный класс изнутри - я знаю API до реализации. – emk
Поскольку я работаю на Python, нет формальных интерфейсов Java-стиля. Однако часто случается, что вам нужно поднять некоторые функции некоторых классов, чтобы определить их как видимые и важные, например, Java-интерфейс. –