Другими словами: где / Как вы абстрагируете / инкапсулируете логику определения следующего шага в мастере на основе того, что пользователь выбрал на конкретном шаге мастера?
Один из способов сделать это - смоделировать классы Wizard, Step и Product. Может быть, что-то вроде этого?
public class Wizard
{
public Step forward() {//...}
public Step backward() {//...}
public Step current() {//...}
public Product getProduct() {//...}
}
public class Step
{
public String name() {//...}
public void commit(Product product) {//...}
public void rollback(Product product) {//...}
}
public class Product
{
//...
}
Цель мастера - создать продукт (автомобиль, компьютер, отдых и т. Д.).
В этом сценарии мастер решает следующий шаг - возможно, в зависимости от состояния продукта, который создает мастер. Мастер будет действовать как Builder под управлением пользовательского интерфейса, который будет Директором и сообщит Мастеру, когда и в каком направлении сделать переход. Волшебник должен решить, каким будет следующий шаг. Можно поддерживать несколько точек ветвления, но эта реализация будет скрыта в мастере.
Шаг будет экземпляром шаблона команды с возможностью отмены / повтора.