All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.neko233.skilltree.commons.objectPool.ObjectPoolApi.kt Maven / Gradle / Ivy

There is a newer version: 0.3.6
Show newest version
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
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy