Java 深度&;狭窄的继承层次?
(这里是Java新手,如有任何回复,将不胜感激。) 我已经创建了一个游戏的实现,还有几个不同的AI在玩它。假设它们都使用相同的基本算法,比如蒙特卡罗树搜索(MCTS)。所有的人工智能都有这个共同的模板,但它们都有细微的区别。每个AI必须包含以前AI的修改,因为我必须展示我的进度 目前,我有一个接口,它定义了MCT所需的方法,还有一个抽象类,它定义了这些方法的实现,以执行普通的MCT(未优化)。我创建的第一个AI扩展了这个抽象类来定义一个具体的版本。然后,下一个AI扩展第一个AI并覆盖某些方法,以某种方式修改算法行为。这种过程是重复的,因此每个AI都扩展了前一个,获得了之前的更改并定义了自己的更改Java 深度&;狭窄的继承层次?,java,Java,(这里是Java新手,如有任何回复,将不胜感激。) 我已经创建了一个游戏的实现,还有几个不同的AI在玩它。假设它们都使用相同的基本算法,比如蒙特卡罗树搜索(MCTS)。所有的人工智能都有这个共同的模板,但它们都有细微的区别。每个AI必须包含以前AI的修改,因为我必须展示我的进度 目前,我有一个接口,它定义了MCT所需的方法,还有一个抽象类,它定义了这些方法的实现,以执行普通的MCT(未优化)。我创建的第一个AI扩展了这个抽象类来定义一个具体的版本。然后,下一个AI扩展第一个AI并覆盖某些方法,以
这创建了一个深而窄的继承层次结构,其结果是很难理解。有没有更好的方法来创建这些AI并更改继承层次结构?继承的替代方法通常是组合,但您确实需要发布代码示例,以便人们提供适当的帮助。继承是Is a的关系:B类是a类。更简单的方法是组合,它使用的关系为has a。类B将有一个类A的实例,它可以在这个实例上调用方法。这给依赖项带来了一些复杂性,但完全消除了继承问题。要用一个例子来扩展@ZachChilders注释,一个
小妖精是一个怪物
,因此它继承了怪物
的属性,但是一个Goblin
可能有一个咒语
,该咒语将使用合成。与之相关的是,请查看策略模式并合成不同方法的AI。更多阅读其他人的解释。大多数情况下,继承的替代方法是组合,但您确实需要发布代码示例,以便人们提供适当的帮助。继承是is a的关系:类B是类a。更简单的方法是组合,它使用has a的关系。类B将有一个类A的实例,它可以在这个实例上调用方法。这给依赖项带来了一些复杂性,但完全消除了继承问题。要用一个例子来扩展@ZachChilders注释,一个小妖精是一个怪物
,因此它继承了怪物
的属性,但是一个Goblin
可能有一个咒语
,该咒语将使用合成。与之相关的是,请查看策略模式并合成不同方法的AI。更多阅读其他人的解释。