Представьте, что у меня есть класс, который представляет собой простую стиральную машину. Он может выполнять следующие операции в следующем порядке: включить → промывка → центрифуга → выключить. Я вижу две основные альтернативы:
-
У меня может быть класс WashingMachine с методами turnOn(), wash (int minutes), центрифуга (int revs), turnOff(). Проблема заключается в том, что интерфейс говорит ничего о правильном порядке операций. Я могу в лучшем случае выбросить InvalidOprationException, если клиент пытается центрифугировать до включения машины. Я также могу использовать класс программ Separete, который будет передавать обороты центрифуги и минуты стирки в стиральную машину и упростит эти методы.
-
Я могу позволить самому классу заботиться о правильных переходах и иметь единственный метод nextOperation(). Проблема с этим, с другой стороны, заключается в том, что семантика плоха. Клиент не будет знать, что произойдет, когда он называет nextOperation(). Представьте, что вы выполняете клик на кнопке центрифуги, чтобы он вызывал nextOperation(). Пользователь нажимает кнопку центрифуги после включения и запуска машины! машина начинает стирать. Мне, вероятно, понадобится несколько свойств в моем классе для параметризации операций или, возможно, отдельный класс программы с полями washLength и centrifugeRevs, но это не проблема.
Какая альтернатива лучше? Или, может быть, есть другие, лучшие альтернативы, которые я пропустил, чтобы описать?