我总是想知道以更多OO方式处理取消按钮的最佳方式是什么。匆忙中,如果按钮被取消,我总是最终对布尔表单属性进行丑陋的检查。
事情就是这样会使代码变脏,在重要的逻辑之间进行大量的“取消检查”。
我总是这样:
void doLogic()
{
checkIfIsCancelled();
callOtherFunction();
checkIfIsCancelled();
callAnotherFunction();
checkIfIsCancelled();
callAnotherFunction();
checkIfIsCancelled();
callAnotherFunction();
}
我希望我足够清楚。我只想要一个更简洁的方法来做到这一点:)
答案 0 :(得分:1)
正确处理此问题的方法是strategy pattern,您可以使用默认策略进行正常处理,并且您有一个已取消的策略。
取消将策略更改为cancelledStrategy,除了一些清理之外什么都不做。下一个电话将转到cancelledStrategy。
通过这种方式,即使清理工作也非常简单,因为您确切地知道流程在哪里被取消。
另一种可能的解决方案(但非常依赖于你的情况)将是状态模式,但是如果你只需要它来取消它会产生很多开销。
答案 1 :(得分:0)
它真的有助于了解您在此处使用的 GUI工具包。就这一点而言,你不可能知道你是在使用Windows,Linux还是mac机器。除此之外,我无法想到以这种方式运行的单个GUI。
大多数GUI以“回调”模式运行小部件(按钮,菜单,列表框等)被创建,并且您的代码附加了“回调”,片段代码或对象&方法,当对小部件执行操作时执行
在java中例如:
Button b = JButton("Push") ;
listener = new ActionListener()_ {
public void actionPerformed(ActionEvent e) {
System.out.println("I was pushed!") ;
}
} ;
b.addActionListener(listener)
安排消息“我被推了!”按下按钮时打印。当然,这个简单的示例省略了设置窗口,填充此窗口小部件等所需的所有工作。
答案 2 :(得分:0)
答案 3 :(得分:0)
您可以将命令模式与堆栈一起使用来实现多级撤消支持。