Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 面向对象设计-创建策略/模式_Java_Oop_Design Patterns - Fatal编程技术网

Java 面向对象设计-创建策略/模式

Java 面向对象设计-创建策略/模式,java,oop,design-patterns,Java,Oop,Design Patterns,对于OOP实践,我正在做一个爱好项目,这是一个测验程序,它从txt文件中读取一个表格,并就表格中的条目提出问题。这样做的目的是为了便于学习我们系课程的材料 到目前为止,我编写了I/O位,将一个相当普通的GUI和类组合在一起,以表示datatable中不同类型的实体。不过,我不确定如何继续进行该计划的核心,我指的是问题生成和验证 我的第一个想法是创建一个类AbstractQuestion,它基本上定义了一个问题是什么以及它有哪些字段(一个字符串表示、一个答案和一个难度级别)。然后我想我可以为不同类

对于OOP实践,我正在做一个爱好项目,这是一个测验程序,它从txt文件中读取一个表格,并就表格中的条目提出问题。这样做的目的是为了便于学习我们系课程的材料

到目前为止,我编写了I/O位,将一个相当普通的GUI和类组合在一起,以表示datatable中不同类型的实体。不过,我不确定如何继续进行该计划的核心,我指的是问题生成和验证

我的第一个想法是创建一个类
AbstractQuestion
,它基本上定义了一个问题是什么以及它有哪些字段(一个字符串表示、一个答案和一个难度级别)。然后我想我可以为不同类型的问题编写类,例如一个类用于简单的值查询(例如给出实体名称并询问特定属性),另一个类用于更复杂的问题(例如询问实体之间的交互等)

然而,我不确定这是否是最好的方式。我真的无法表达为什么,但我觉得这不是最整洁的方式。在工厂类上工作有意义吗?基本上,我需要:

  • 提供基于从数据表中随机选取的一个或多个实体生成问题的方法
  • 根据用户的输入,需要在运行时创建不同类型的问题(期望的难度级别)
  • 问题需要验证,并且用户需要通过主
    测验
    类得到通知(因此问题需要可访问)
我可以简单地开始,只实现一种类型的问题,让它发挥作用,并及时添加新功能,但我认为提高我对OOP的理解是一种很好的做法,而且我担心如果它起作用,我开始将它分发给人们进行测试,我最终会从事其他工作。我希望能够更好地概念化我的项目,我认为这可能是一个很好的机会来改进这一点

PS:如果不是很明显,我的教育背景不是程序员:)

你可以使用创建工厂,知道如何根据特定参数创建问题。
至于你可以使用的通知。研究它们并查看您喜欢的语言示例

您可以使用创建工厂,知道如何根据特定参数创建问题。

至于你可以使用的通知。研究它们,看你喜欢的语言的例子

从两个方面思考:

  • 什么对象使用问题对象?他们需要问些什么?也就是说,我们讨论问题的接口
  • 问题是如何解决这些问题的?问题的行为
  • 最初,只考虑接口。我不清楚我们需要这个问题做什么。在我看来,一个答案是自由格式文本的问题和一个提供“从a到D中选择一个”的问题以及一个要求“从a到D中选择一个或多个”的问题在UI中可能会非常不同。那么,你是在考虑“问题:请展示你自己,得到你的答案并告诉我用户的分数”还是“问题:你的文本是什么?问题:你接受什么样的答案?问题:你的四个选项是什么?问题:用户输入了‘a’他们的分数是多少?”

    一旦你清楚地知道问题的责任,那么你可以考虑不同的问题接口和类的数量,从而决定你是否需要一个创造性的模式,比如工厂。当您有许多不同的类都实现相同的接口时,Factory工作得很好


    工厂:去问我一个问题。问题:去问用户。

    从两个方面思考:

  • 什么对象使用问题对象?他们需要问些什么?也就是说,我们讨论问题的接口
  • 问题是如何解决这些问题的?问题的行为
  • 最初,只考虑接口。我不清楚我们需要这个问题做什么。在我看来,一个答案是自由格式文本的问题和一个提供“从a到D中选择一个”的问题以及一个要求“从a到D中选择一个或多个”的问题在UI中可能会非常不同。那么,你是在考虑“问题:请展示你自己,得到你的答案并告诉我用户的分数”还是“问题:你的文本是什么?问题:你接受什么样的答案?问题:你的四个选项是什么?问题:用户输入了‘a’他们的分数是多少?”

    一旦你清楚地知道问题的责任,那么你可以考虑不同的问题接口和类的数量,从而决定你是否需要一个创造性的模式,比如工厂。当您有许多不同的类都实现相同的接口时,Factory工作得很好


    工厂:去问我一个问题。问题:去问用户。

    我有一个简单的测验应用程序运行在production=)有不同类型的问题,有不同的行为(应该以不同的方式提问、回答和提示)。问题具有不同的复杂性等

    在我的情况下,最合适的解决方案是使用一些抽象方法(也可以是接口)和不同的实现创建问题超类。并且有QuestionGenerator(作为工厂工作),工厂,基于一些输入返回不同的实现

    考虑一下问题的界面(公共部分),然后使用工厂模式。 可能会有更复杂的场景,您可以发现使用AbstractFactory或Builder模式的一些优势

    在我这个简单的例子中,提取接口是足够的