如何在 Java 中实例化类中的变量,同时遵守 SOLID 原则?

问题描述 投票:0回答:1

我正在用java开发一个游戏,通过应用程序来理解SOLID原则,我的实体类代码目前看起来像这样

public abstract Entity() {
    
    Point worldCoord;
    /*
    * Other variable declarations...
    */
    public void Entity() {
      worldCoord = new Point();
      // Other variables...
    }
    /*
    * Other variable declarations...
    */
} 

我相信这违反了 SOLID,就好像我需要添加一个新属性,比如

Rectangle attackRange
,那么我必须将行
attackRange = new Rectangle();
添加到构造函数中,这将修改类,因此违反了 SOLID。

我想到解决问题的一种方法是在 setter 函数内实例化变量,但这“感觉”是错误的。所以我想知道我哪里出了问题,以及在遵守 SOLID 原则的同时实例化类变量的正确方法是什么。

谢谢。

java oop game-development solid-principles class-design
1个回答
0
投票

我相信这违反了 SOLID,就好像我需要添加一个新属性,比如

Rectangle attackRange
,那么我必须将行
attackRange = new Rectangle();
添加到构造函数中,这将修改类,因此违反了 SOLID。

当想知道某件事是否会违反 SOLID 时,首先考虑五个原则中的哪一个受到威胁。不过,可能不止一个。

在这种情况下,听起来好像您担心开闭原则。这表示类应该对扩展开放,但对修改关闭。

由于

Entity
是一个
abstract
类,因此它可以扩展。

因此,正如 Bohemian 在注释中所写,没有什么可以阻止您使用添加

Entity
字段的类来扩展
attackRange
。您是否需要评论还建议的
Attacker
接口可能取决于您想要对新类字段执行什么操作。

© www.soinside.com 2019 - 2024. All rights reserved.