初次提交
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
## ObjectPool — 通用对象池(Autoload: ObjectPool)
|
||||
## 权威来源:implementation_plan.md §2.1 Layer-0
|
||||
##
|
||||
## 使用约定:
|
||||
## 1. 被池化对象必须实现 reset() 方法 (签名:func reset() -> void)
|
||||
## 2. 取出:pool.acquire() → 返回对象(内部已调 reset())
|
||||
## 3. 归还:pool.release(obj)
|
||||
extends Node
|
||||
|
||||
## 创建一个指定工厂和容量的对象池
|
||||
func create_pool(capacity: int, factory: Callable) -> PoolInstance:
|
||||
var p := PoolInstance.new()
|
||||
p._factory = factory
|
||||
for _i in capacity:
|
||||
p._stack.append(factory.call())
|
||||
return p
|
||||
|
||||
# ── PoolInstance 内部类(业务系统持有实例) ──────────────────────────────
|
||||
class PoolInstance:
|
||||
var _factory: Callable
|
||||
var _stack: Array = []
|
||||
|
||||
func acquire() -> Object:
|
||||
var obj: Object
|
||||
if _stack.is_empty():
|
||||
obj = _factory.call()
|
||||
else:
|
||||
obj = _stack.pop_back()
|
||||
if obj.has_method("reset"):
|
||||
obj.reset()
|
||||
return obj
|
||||
|
||||
func release(obj: Object) -> void:
|
||||
_stack.append(obj)
|
||||
|
||||
func get_available_count() -> int:
|
||||
return _stack.size()
|
||||
|
||||
func drain() -> void:
|
||||
_stack.clear()
|
||||
Reference in New Issue
Block a user