处理“取消按钮”的最佳OO方式

时间:2011-05-23 12:14:30

标签: oop coding-style

我总是想知道以更多OO方式处理取消按钮的最佳方式是什么。匆忙中,如果按钮被取消,我总是最终对布尔表单属性进行丑陋的检查。

事情就是这样会使代码变脏,在重要的逻辑之间进行大量的“取消检查”。

我总是这样:

void doLogic()
{
     checkIfIsCancelled();
     callOtherFunction();

     checkIfIsCancelled();
     callAnotherFunction();

     checkIfIsCancelled();
     callAnotherFunction();

     checkIfIsCancelled();
     callAnotherFunction();
}

我希望我足够清楚。我只想要一个更简洁的方法来做到这一点:)

4 个答案:

答案 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)

首先想到的是http://en.wikipedia.org/wiki/Chain-of-responsibility_pattern,但我不确定,这里很好。

答案 3 :(得分:0)

您可以将命令模式与堆栈一起使用来实现多级撤消支持。