我正在用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 原则的同时实例化类变量的正确方法是什么。
谢谢。
我相信这违反了 SOLID,就好像我需要添加一个新属性,比如
,那么我必须将行Rectangle attackRange
添加到构造函数中,这将修改类,因此违反了 SOLID。attackRange = new Rectangle();
当想知道某件事是否会违反 SOLID 时,首先考虑五个原则中的哪一个受到威胁。不过,可能不止一个。
在这种情况下,听起来好像您担心开闭原则。这表示类应该对扩展开放,但对修改关闭。
由于
Entity
是一个 abstract
类,因此它可以扩展。
因此,正如 Bohemian 在注释中所写,没有什么可以阻止您使用添加
Entity
字段的类来扩展 attackRange
。您是否需要评论还建议的 Attacker
接口可能取决于您想要对新类字段执行什么操作。