Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/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_Design Patterns_Oop_Data Modeling - Fatal编程技术网

Java 如何对对象层次结构中的级联设置建模

Java 如何对对象层次结构中的级联设置建模,java,design-patterns,oop,data-modeling,Java,Design Patterns,Oop,Data Modeling,试着把我的头放在如何在对象层次结构中建模默认值的概念上。这些默认值应应用于层次中的所有对象,除非对象替代设置。如果覆盖设置,则该设置及其所有子项将获得覆盖的值,但其他值将从层次结构中向上拉 也许举个例子会有所帮助。考虑一个系统模型,体育赛事的日程安排。在顶部,有一个运动物体。此对象包含一组联赛,而联赛包含一组赛季。赛季包含一组赛程,赛程包含一组比赛: class Sport { private Set<League> leagues; } class League {

试着把我的头放在如何在对象层次结构中建模默认值的概念上。这些默认值应应用于层次中的所有对象,除非对象替代设置。如果覆盖设置,则该设置及其所有子项将获得覆盖的值,但其他值将从层次结构中向上拉

也许举个例子会有所帮助。考虑一个系统模型,体育赛事的日程安排。在顶部,有一个运动物体。此对象包含一组联赛,而联赛包含一组赛季。赛季包含一组赛程,赛程包含一组比赛:

class Sport {
    private Set<League> leagues;
}
class League {
    private Set<Season> seasons;
}
class Season {
    private Set<Schedule> schedules;
}
class Schedule {
    private Set<Game> games;
}
class Game {
}
然后,联盟可以覆盖这些设置,也许:

venues: ["Field 4","Field 5"]
weekdays: ["Sat","Sun"]
季节可以覆盖设置,日程也可以覆盖设置。也许某个赛程是针对低水平比赛的,只需要一名裁判。因此,该计划可能会使用以下内容覆盖默认值:

requiredRefereePositions: ["Referee"]
因此,这意味着,当调度系统运行并试图在此调度范围内安排比赛时,它将知道比赛应安排在“第4场”或“第5场”,应安排在周六或周日,应为90分钟,并有一名裁判:

venues: ["Field 4","Field 5"]
weekdays: ["Sat","Sun"]
gameDuration: 90
requiredRefereePositions: ["Referee"]
什么样的方法可以很好地对此进行建模?是否有现有的设计模式?我一直在谷歌上寻找解决方案,但我很难选择正确的关键词。如果有人能告诉我在线资源或这样做的例子,我将不胜感激!我用Java实现了这一点,但我将在任何方面都看一看示例

我能想到的一种类似的技术是浏览器中CSS的工作方式。值沿层次结构向下级联,每个节点都可以覆盖更高层次的值。这是正确的方法吗?我将如何用Java建模?如何通过Hibernate持久化和查询它

我最后关心的是如何处理仅与层次结构中某一组对象相关的默认设置。例如,在CSS中,值“width”对于“script”元素可能没有意义。在CSS中,该设置可能只是被忽略,但如果我这样做,我的默认对象将是这个大类,包含系统中任何对象可能需要的所有可能设置。“所需裁判位置”对场馆对象意味着什么?不确定这是否是最好的方法。

如果你看看这门课,我认为它将为你提供解决方案或解决方案的策略

我鼓励您不要试图将默认值的getter放入对象模型中,这违反了关注点分离的原则,而是将属性传递给构造函数。更有可能的是,内置的Properties类将实现您所期望的功能,并提供您所要求的解耦级别

如果您不喜欢进行基于字符串的查找,可以使用enum实现类似的功能,甚至在您自己的自定义类中实现特定的getXXX调用。关键是类将在其构造函数中接收委托。

如果您查看该类,我认为它将为您提供解决方案或解决方案策略

我鼓励您不要试图将默认值的getter放入对象模型中,这违反了关注点分离的原则,而是将属性传递给构造函数。更有可能的是,内置的Properties类将实现您所期望的功能,并提供您所要求的解耦级别


如果您不喜欢进行基于字符串的查找,可以使用enum实现类似的功能,甚至在您自己的自定义类中实现特定的getXXX调用。关键是该类将在其构造函数中接收一个委托。

和一个受保护的方法getDefaults(),必要时将被重写。您不希望每个Schedule实例都有不同的类。ie Schedule House Leagues ScheduleNewYork=CreateSchedule(…);计划repScheduleSanJose=CreateSchedule(…);两者都是计划,只是不同的默认值(可能)。默认值将在运行时设置。至少我是这样理解的。我想在我的评论中加入新词!或者等等,联盟起源于体育,所以可以覆盖getWeekdays()。仍然是一个奇怪的派生。抽象接口WeekdaysApplication。由联盟、体育等实施。。。和一个受保护的方法getDefaults(),在必要时重写。您不希望每个Schedule实例都有不同的类。ie Schedule House Leagues ScheduleNewYork=CreateSchedule(…);计划repScheduleSanJose=CreateSchedule(…);两者都是计划,只是不同的默认值(可能)。默认值将在运行时设置。至少我是这样理解的。我想在我的评论中加入新词!或者等等,联盟起源于体育,所以可以覆盖getWeekdays()。仍然是一个奇怪的派生。抽象接口WeekdaysApplication。由联盟、体育等实施。。。类似的。嗯,我从来没有想到过使用属性。我不确定我是否会使用实际的属性类,但它的设计可能会起作用。我将更深入地研究它。行为委托是一种非常常见的设计模式。如果可能,将委托作为接口传递给较低级别对象的构造函数(而不是委托的实际类)——这可以防止静态耦合。嗯,使用我从未想到过的属性。我不确定我是否会使用实际的属性类,但它的设计可能会起作用。我将更深入地研究它。行为委托是一种非常常见的设计模式。如果可能,将委托作为接口传递给较低级别对象的构造函数(而不是委托的实际类)——这可以防止静态耦合。
requiredRefereePositions: ["Referee"]
venues: ["Field 4","Field 5"]
weekdays: ["Sat","Sun"]
gameDuration: 90
requiredRefereePositions: ["Referee"]