Лучшие программисты изучают шаблоны у других программистов.

Изучение паттернов — это то, чем большинство хороших программистов занимаются по мере накопления опыта. Как только вы поймете, что будете получать знания быстрее, если не будете ограничивать себя собственным опытом, вы начнете изучать мудрость, которую другие приобретали с годами. С миллионами разработчиков, которые пишут код уже несколько десятилетий, люди изучили несколько методов, которые появляются снова и снова. Они известны как шаблоны.

Одним из таких методов является шаблон состояния. Это полезно, когда поведение объекта зависит от его внутреннего состояния. В этом сценарии объект может находиться только в одном состоянии в любой момент времени. В каждом заданном состоянии поведение объекта различно. Например, предположим, что объект автомобиля имеет состояния REVERSE, PARKED и INGEAR. Вызов ускорения() будет вести себя по-разному в зависимости от его состояния.

В этом шаблоне ускорение() не является фактическим методом в объекте автомобиля, а скорее является интерфейсом. Это реализуется конкретными реализациями. Другой класс управляет контекстом, который определяет, в каком состоянии находится объект автомобиля, и назначает класс реализации.

Каждое состояние ограничивает поведение объекта. Таким образом, в классе реализации может быть несколько методов, если они связаны с этим состоянием. Например, возможно, displayParkingLights() возвращает true (или выполняет другие действия) для реализации PARKED, но не для двух других.

Использование этого шаблона позволяет избежать больших монолитных условных операторов. Кроме того, можно добавить новые состояния (или изменить существующее состояние) без изменения других состояний. Разделение этого поведения на основе состояния также упрощает тестирование кода.