Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 向导用户界面的设计模式_Design Patterns_User Interface_Wizard - Fatal编程技术网

Design patterns 向导用户界面的设计模式

Design patterns 向导用户界面的设计模式,design-patterns,user-interface,wizard,Design Patterns,User Interface,Wizard,所以需求是为多步骤向导/单步向导创建一个通用接口。由于每个向导可能没有所有按钮(单步向导只有“取消”和“提交”,多步第一个屏幕有“取消”、“下一步”等) 我应该为每个按钮创建单独的界面吗 interface CancelButton { void onCancelClick(); } interface NextButton { void onNextClick(); } 等等?每个向导只实现它们所需要的吗 这个用例有更好的设计模式吗 谢谢。看起来您只需要一个简单的类层次结构

所以需求是为多步骤向导/单步向导创建一个通用接口。由于每个向导可能没有所有按钮(单步向导只有“取消”和“提交”,多步第一个屏幕有“取消”、“下一步”等)

我应该为每个按钮创建单独的界面吗

interface CancelButton 
{
   void onCancelClick();
}

interface NextButton 
{
   void onNextClick();
}
等等?每个向导只实现它们所需要的吗

这个用例有更好的设计模式吗


谢谢。

看起来您只需要一个简单的类层次结构。对于每个基本的向导页面案例,您都会有一些基本的抽象
WizardPage
类和子类,比如
WizardWelcomePage
WizardLastPage
WizardIntermediatePage
。然后,向导被定义为向导页面的集合,每个页面都知道应该显示哪些按钮。不是一个特殊的设计模式,简单的OOP


这个想法的另一个变体,使事情更加灵活,就是使基本的
WizardPage
在其构造函数中接受
WizardButton
实例的集合(而
WizardCancelButton
WizardAcceptButton
WizardNextButton
将是子类)。这将允许您对向导页面和向导按钮具有单独的层次结构(变体)。我认为这可以看作是一种桥梁模式。每个按钮子类都会在其构造函数中请求另一个接口,以便在单击它们时可以将此信息发送到
向导引擎
,该引擎将执行相应的操作:移动到下一页、取消或接受。您可能还需要从每个
向导页面
发出另一个事件链,以指示内容何时变为有效或无效,这样
向导引擎

就可以启用/禁用相应的按钮。您可以使用一个按钮界面来显示onClick方法。NextButton、Cancel Button和SubmitButton实现onClick方法来定义特定于按钮的行为。您可以有一个向导类,该向导类有一个列表和一个要添加到此列表的方法。向导应该有一个名为onClick的方法,该方法通过单击的按钮传递。此方法检查单击的按钮是否存在于列表中,并委托给已单击按钮的onClick方法。