在 java 中有使用堆的 SOLID 方法吗?

Is there a SOLID way to use the heap in java?

所以我读到静态变量和方法打破了 open close principle

假设您有一个 class,它有一个带有 "lot of data" (10mb) 的变量,该变量是最终的并在所有实例之间共享游戏中敌人的精灵图,比方说僵尸。

如果我不使用 SOLID,我会将变量设为私有静态,这样它只在内存中存储一​​次。有 100 个僵尸使用 10mb 的内存花费在存储在堆上的 sprite map 上,如果每个实例 1 个,则远远少于 1gb 的内存。

问题 - 有没有一种可靠的方法可以使用堆来存储精灵图的一个副本,这样它就不会占用太多内存?

您的问题是您无法了解 class 中内置的所有实例之间共享的 sprite 贴图。

然后您需要将它移到别处。在另一个 class 中有一个 sprite map 工厂方法,它知道应该始终返回相同的引用。 (单身人士)

随着您获得更多经验,您会发现很多编码都是关于推迟决定在给定位置实际使用什么值,通常是因为您直到运行时才知道。这通常会导致非常粗糙的代码,以便将内部移动部件与决定做什么的外部世界连接起来。

根据我的经验,到目前为止最简洁的方法是将它从您自己的代码中移出并使用依赖注入框架。 Java 存在多个;我发现有关在编译时确定配置的 Dagger 2 方法非常令人耳目一新。