如何确保方法按正确顺序执行?

时间:2011-03-10 17:50:34

标签: design-patterns pseudocode

我总是有问题设计一个类,程序员可以清楚地知道正确的方法调用,并且在数据之前没有执行某些方法的危险,变量是由其他方法设置的。所以我通常使用flags和If语句是安全的:

class foo {
    boolean isInitialised = FALSE;
    boolean isSthDone = FALSE;
    float importantData;

    public void initialise {

        ...

        isInitialised = TRUE;
    }

    public void doSth1 { 

      if (isInitialised) {

         importantData = 2134234; 

         }   ...

          isSthDone = TRUE;

    }

    public void doSth2 { 

        if (isInitialised && isSthDone1) {

            ...

          }
    }
}

这种设计没有提供任何线索,应该如何使用算法 - 首先应该执行哪种方法,这个问题是否有任何设计模式?

4 个答案:

答案 0 :(得分:8)

考虑一下这些步骤的独立执行是否真的有意义。如果该类的使用者确实必须按照该顺序执行步骤1,步骤2和步骤3,那么只需将它们折叠为一个公共方法并将这些步骤封装在您的类中。

另一方面,如果消费者在哪个顺序上确实存在选项,那么您就会遇到状态转换问题,并且需要了解步骤的合法顺序。

答案 1 :(得分:6)

您应该在构造函数中进行必要的初始化 - 初始化正是构造函数的用途。根据您使用的语言,它可能如下所示:

Class foo{

  public: 
  foo(){
    a = 1;
    b = "something";
  }

   int a;
   string b;

}

答案 2 :(得分:4)

@D。 Lambert和@David给出了很好的建议。

如果您想要一个强制执行一系列调用的设计模式,请查看Template Method。这可能不是你想要的,我很遗憾在过去选择这种模式,所以要小心使用它。无论您是否喜欢,它都会执行订单。

答案 3 :(得分:2)

您应该考虑在这里使用。对我来说,你的代码如下:

  • “我处于让我初始化的状态”
  • “我处于初始状态,所以我可以做所需的逻辑 - Sth1
  • 最后:“我处于最后状态,所以我现在可以做到 Sth2

http://sourcemaking.com/design_patterns/state

无论如何,就像之前被告知的那样,最简单的选择是将这些方法设为私有,并通过一种新的公共方法将它们全部调用好。