Легковес
Реализовала на котлине паттерн легковес. Помню как на 2 курсе, когда пыталась создать свою небольшую игрушку он существенно упростил мне жизнь) Оказалось что можно 1 раз загрузить что-либо тяжелое, например модельку или текстуру и использовать ее сразу в нескольких объектах. И не засорять память лишним мусором. Ниже привожу упрощенную реализацию для создания игровых объектов, использующих общие текстурки
interface Texture {}
class MyTexture(val rawData: String) : Texture {
override fun toString() = "Texture raw data: $rawData"
}
@Component
class TextureFactory{
val textures = mutableMapOf<String, Texture>()
fun createTexture(path: String) : Texture {
textures[path]?.let {
println("Использована имеющаяся текстура")
return it
}
val localPath = ResourceLoader::class.java.classLoader.getResource(path)?.toURI()
localPath?.let {
val data = Files.lines(Paths.get(localPath)).collect(Collectors.joining())
val texture = MyTexture(data)
textures[path] = texture
println("Использована текстура, загруженная из файла")
return texture
}
throw IllegalArgumentException("Текстура $path не найдена")
}
}
data class GameObject (
val id: Long,
val positionX: Long,
val positionY: Long,
val texture: Texture,
)
@RestController
class TextureController (
val textureFactory: TextureFactory
) {
@GetMapping
fun createGameObject(
@RequestParam id: Long,
@RequestParam positionX: Long,
@RequestParam positionY: Long,
@RequestParam path: String
) = GameObject(
id = id,
positionX = positionX,
positionY = positionY,
texture = textureFactory.createTexture(path)
)
}
Full-stack system-crasher
у тебя тут чет грустно так что лови подборку моих шуток про программирование
Разве это не должно реализовываться средствами движка?
Я хочу пройтись по всем паттернам и сама реализовать их) Понятно что в движке это будет, но практика есть практика) Лучше понимать как оно внутри работает, чем считать что это какая-то "подкапотная магия"
По сути бесполезно, но увожаемо