【发布时间】:2010-02-18 01:15:32
【问题描述】:
我正在尝试构建一个 GraphBot 类,它可以回答有关关联图的不同问题,例如路径长度、两个顶点之间的最短路径、通过给定顶点的路径数等。
我希望能够在不更改 Bot 内部的任何代码的情况下添加新问题,它只负责接收问题,委托其他算法使用与 bot 关联的图形来解决问题并返回回答。
所以是这样的:
public class GraphBot {
private Graph graph;
public GraphBot(Graph graph) {
this.graph = graph;
}
public Answer ask(Question question) {
// delegate somehow to answer the question, providing the graph
// return an Answer object encapsulating the answer
}
}
public interface Answer {
public toPrintableOutput();
}
public interface Question {
// question methods go here... this is what I'm having trouble with
}
我遇到的问题是问题具有相关的条件或参数。例如,“A”和“B”之间的问题“路径长度”具有问题类型(“路径长度”),这是所有问题都会有的,还有参数“A”和“B”。相比之下,“通过顶点的路径”问题将只有代表顶点的参数“C”。
我想不出一种呈现统一界面的方式,以便系统可以轻松扩展以处理具有不同数量和类型参数的众多不同问题。我可以有一个与每个问题相关联的 QuestionSolver 在这种情况下,如果每个 Question 具有不同的属性并不重要,因为 QuestionSolver 可以断言问题是有效类型,但这需要在某处将 Question 映射到 QuestionSolver每当引入新问题时都需要更新。
实现这个系统的最可扩展的方式是什么,以便新问题不需要对不同类的负载进行大量更改?我真的希望能够创建一个实现 Question 的类,并可能创建一个可以解决该问题的类,然后让 GraphBot 能够自动处理该问题。
【问题讨论】:
标签: oop architecture