对于OOP练习我正在开发一个爱好项目,一个测验程序,它从txt文件中读取一个表,并询问有关表中条目的问题。我们的想法是帮助学习我们部门课程的材料。
到目前为止,我编写了I / O位,将非常适度的GUI和类表示在一起,以表示数据表中不同类型的实体。我不知道如何继续该计划的核心,我的意思是问题生成和验证。
我的第一个想法是拥有一个类AbstractQuestion
,它几乎定义了问题是什么以及它有哪些字段(字符串表示,答案和难度级别)。然后我想我可以为不同类型的问题编写类,例如一个类用于简单的值查询(比如给出一个实体的名称并要求一个特定的属性),另一个类用于更复杂的问题(例如询问交互的问题)实体等)。
我不确定这是否是最佳方式。无法真正表达为什么,但我感觉这不是最好的方法。在Factory类上工作是否有意义?基本上我需要:
Quiz
类通知用户(因此需要访问问题)。我可以开始简单并只实现一种类型的问题,让它工作并及时添加新功能但我认为提高我对OOP的理解是好的做法,而且我担心它是否有效并且我开始让它供人们测试出来,我最终会在其他方面努力。我希望能够更好地概念化我的项目,我认为这可能是改善项目的好机会。
PS:如果不明显,我不是教育背景的程序员:)
答案 0 :(得分:2)
您可以使用Abstract Factory创建知道如何根据特定参数创建问题的工厂 至于通知,您可以使用Observer Pattern。研究它们并以您偏好的语言查看示例
答案 1 :(得分:2)
考虑两件事:
最初,只考虑接口。我不清楚我们需要做什么问题。在我看来,一个问题的答案是自由形式的文本和提出“选择一个A到D”的问题和一个问题“问一个或多个A到D”的问题可能在UI中显得非常不同。所以你在考虑“问题:请展示自己,得到答案并告诉我用户的分数”或“问题:你的文字是什么?问题:你采取什么样的答案?问题:你有四个选择: ?问题:用户输入'a'他们得分是什么?“
一旦你明确了问题的责任,那么你可以考虑适当数量的不同问题接口和类,从而决定你是否需要一个创造模式,如Factory。当您有许多不同的类都实现相同接口时,工厂运行良好。
工厂:给我一个问题。问题:去问用户。
答案 2 :(得分:1)
我在生产中运行了简单的测验应用程序=)有不同类型的问题,有不同的行为(应该以不同的方式询问,回答和倾斜)。问题有不同的复杂性等。
在我的情况下,最合适的解决方案是创建问题超类,它带有一些抽象方法(也可能是一个接口)和不同的实现。而且还有QuestionGenerator(作为工厂),工厂,基于一些输入返回不同的实现。
想想您的问题的界面(常见部分)并使用工厂模式。 可能会有更复杂的场景,您可以在其中找到使用AbstractFactory或Builder模式的一些优点。
在我的简单案例中,提取界面是