创建具有不同属性的对象

时间:2016-04-19 03:46:52

标签: java oop

我很担心如何从面向对象的角度来看这一点并考虑到可维护性。在设计应用程序时,我被教导要始终考虑变化。所以我想花一些时间在个人设计项目上,我可能想稍后改变它。该应用程序的灵感来自最新的分区游戏。它将是每秒伤害的计算器。

我选择的技术是Spring,REST,Hibernate,Angular.js 1.0和maven。可能是引导程序,但我现在不确定因为我只专注于后端。我理解的这些技术对于这个级别的应用程序并不是真正需要的,但我是为了学习目的而做的。

现在,既然您已了解项目的内容,那么现在我遇到了问题。我很难使服务器对象与POJO相关。

在师里我们有武器和装备。武器可以有不同的mod和属性。并非所有武器都具有相同的mod,例如突击步枪可以有一个范围,但为什么霰弹枪有一个范围?武器的属性相对相同,但是mods根据使用的武器类型而有所不同。对于齿轮,齿轮可以根据齿轮的类型具有不同的属性。手套可以具有增加爆击几率的属性,而背包具有增加弹药容量的属性。手套不具备弹药容量属性,背包不具备爆击几率。

手套和背包都是齿轮,但不是同一类型的齿轮。武器也是如此,突击步枪和霰弹枪都是武器,但不是同一类型的武器。我想过要创建一个名为gear and weapon的超级类,然后继承子类化不同的武器/装备。我很困惑如何从专业角度做这件事,并作为设计的最佳学习经验。

2 个答案:

答案 0 :(得分:1)

这看起来像是Decorator模式的用例。

请浏览链接:https://sourcemaking.com/design_patterns/decorator

它甚至有一个使用武器的类似例子。

当我们想要动态地向对象添加其他属性时,使用基本修饰。

创建一个类型为modDecorator(基类)的装饰器,并使用特定的mod扩展它。现在动态地你可以将这些mod添加到你的武器上。

我对Mods / Weapons / gear / Attributes的类型不太熟悉,所以我无法给出具体的答案,但是要通过链接。

答案 1 :(得分:0)

拥有武器和装备超级类的最初想法听起来就像是设计的好习惯。

对于mods,您可以将属性添加到武器作为mods的属性列表,并研究使用泛型和接口来限制哪种类型的枪可以具有哪种mod。

类似于步枪类的所有子类的类型范围的属性,以及其他类似的东西。

根据装备物品的对象来研究这个可能是个好主意。

基础伤害如何受到影响?
谁持有基础伤害?