Есть ли способ SOLID использовать кучу в java? - PullRequest
2 голосов
/ 02 апреля 2020

Итак, я прочитал, что переменные и методы stati c нарушают принцип открытия-закрытия .

Допустим, у вас есть класс, в котором есть переменная с «большим количеством данных» ( 10mb), который является окончательным и используется во всех случаях, например, спрайт-карта для врага в игре, скажем, зомба ie.

Если бы я не использовал SOLID Я бы сделал переменную private stati c, чтобы она хранилась в памяти только один раз. Наличие 100 зомби, использующих 10 Мб памяти, потраченных на карту спрайтов, хранящуюся в куче, намного меньше, чем 1 Гб памяти, если это было 1 на экземпляр.

Вопрос - Есть ли SOLID способ использовать кучу для сохранить одну копию карты спрайтов, чтобы она не занимала столько памяти?

1 Ответ

2 голосов
/ 05 апреля 2020

Ваша проблема в том, что вы не можете знать, как карта спрайтов распределяется между всеми экземплярами, встроенными в ваш класс.

Затем вам нужно переместить его в другое место. Имейте метод фабрики карты спрайтов в другом классе, который знает, что та же самая ссылка должна быть возвращена всегда. (Единичный)

По мере приобретения опыта вы обнаружите, что большая часть кодирования связана с отложением решений о том, какое значение на самом деле следует использовать в данном месте, как правило, потому что вы не знаете до времени выполнения. Как правило, это приводит к довольно грубому коду для соединения внутренних движущихся частей с внешним миром, в котором принимается решение о том, что делать.

По моему опыту, самый чистый способ сделать это - двигаться это из вашего собственного кода и использовать платформу Dependency Injection. Некоторые существуют для Java; Я нахожу подход Dagger 2 к определению конфигурации во время компиляции очень освежающим.

...