我总是有问题设计一个类,程序员可以清楚地知道正确的方法调用,并且在数据之前没有执行某些方法的危险,变量是由其他方法设置的。所以我通常使用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) {
...
}
}
}
这种设计没有提供任何线索,应该如何使用算法 - 首先应该执行哪种方法,这个问题是否有任何设计模式?
答案 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)
您应该考虑在这里使用州。对我来说,你的代码如下:
http://sourcemaking.com/design_patterns/state
无论如何,就像之前被告知的那样,最简单的选择是将这些方法设为私有,并通过一种新的公共方法将它们全部调用好。