public class Main {
public static void main(String[] args) {
DataStructure s = new DataStructure();
Input in = new Input();
Data x = null;
while ((x = in.readNext()) != null) {
if (x instanceof InsertData) {
s.insert((InsertData)x);
} else if (x instanceof QueryData) {
System.out.println(s.query((QueryData)x));
}
}
}
}
Input
读取用户输入,并使用方法Data
以Data readNext()
形式返回用户输入。Data
可以是InsertData
或QueryData
(它们也具有不同的字段,即,要插入的数据形式不同于查询)。我想做的是读取
Data
并在DataStructure s
上执行插入/查询,具体取决于Data
返回的readNext()
类型。上面的代码是我针对此问题的简单解决方案,但它使用的转换和instanceof并不是很好的编码风格。您能提出更好的解决方案吗?
我想到的另一个解决方案是在
void performAction(DataStructure s)
中具有方法Data
,该方法将被InsertData
/ QueryData
覆盖,并对DataStructure
执行perfom相应的操作,但是我认为它将不必要地将DataStructure
与Data
,这也不是一个好的样式。意思是说,我想分开输入和执行操作,因为读取数据和使用数据做些不同的事情。 最佳答案
将方法performAction(Data)
添加到类DataStructure
。
然后将抽象方法performOperation()
添加到类Data
。
覆盖类performOperation()
和类InsertData
中的方法QueryData
。
类performAction(Data)
中的方法DataStructure
如下所示:
public void performAction(Data x) {
x.performOperation();
}
并且您的
while
循环(在您的方法main()
中)将是:while ((x = in.readNext()) != null) {
s.performAction(x);
}