Легковес

Легковес

Реализовала на котлине паттерн легковес. Помню как на 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) ) }
1
12 комментариев

Full-stack system-crasher

у тебя тут чет грустно так что лови подборку моих шуток про программирование

1

Разве это не должно реализовываться средствами движка?

1

Я хочу пройтись по всем паттернам и сама реализовать их) Понятно что в движке это будет, но практика есть практика) Лучше понимать как оно внутри работает, чем считать что это какая-то "подкапотная магия"

1

По сути бесполезно, но увожаемо