com.neko233.skilltree.commons.objectPool.ObjectPoolApi.kt Maven / Gradle / Ivy
package com.demo.actor.objectPool
import java.util.*
// 对象池接口
interface ObjectPoolApi {
// 获取对象池的唯一名称
fun getUniqueName(): String
// 获取对象池的队列
fun getObjectPoolQueue(): Queue
// 获取对象池的最大缓存数量
fun getMaxCount(): Int
// 获取对象的销毁函数
fun getDestroyer(): (T) -> T
// 获取对象的创建函数
fun getCreator(): () -> T
// 获取或创建一个对象
fun getOrCreateOne(): T {
val objPoolQueue = getObjectPoolQueue()
return if (objPoolQueue.isNotEmpty()) {
objPoolQueue.poll() // 从对象池队列中获取一个对象
} else {
getCreator().invoke() // 调用创建函数来创建一个新对象
}
}
// 回收一个对象
fun recycleObject(obj: T): Boolean {
if (obj == null) {
return false
}
val destroyer = getDestroyer()
val queue = getObjectPoolQueue()
return if (queue.size < getMaxCount()) {
destroyer.invoke(obj) // 调用销毁函数来销毁对象
queue.offer(obj) // 将对象加入对象池队列
true
} else {
destroyer.invoke(obj) // 调用销毁函数来销毁对象
false
}
}
// 清空对象池
fun clear() {
getObjectPoolQueue().clear()
}
// 获取当前对象池中对象的缓存数量
fun getCurrentCount(): Int = getObjectPoolQueue().size
}