別の言い方をすれば、ウィザードの特定のステップでユーザーが選択した内容に基づいて、ウィザードの次のステップを決定するロジックをどこで/どのように抽象化/カプセル化しますか?
これを行う 1 つの方法は、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
{
//...
}
ウィザードの目的は、製品 (車、コンピューター、休暇など) を構築することです。
このシナリオでは、ウィザードが構築している製品の状態に基づいて、次のステップを決定するのはウィザードです。ウィザードは、ディレクターである UI の制御下でビルダーのように動作し、いつ、どの方向に移行するかをウィザードに伝えます。実際に次のステップが何であるかを決定するのは、ウィザード次第です。複数の分岐点をサポートできますが、その実装はウィザード内に隠されます。
ステップは、取り消し/やり直し機能を備えたコマンド パターンのインスタンスになります。