[PHP] 对象池模式-创建型设计模式

最重要的特征是,有两个数组存对象,忙的数组和闲的数组.
当使用对象后,不是立即销毁对象,而是放回池子闲的数组里面,下次使用直接拿,拿到后放到忙的数组里.当拿不到的时候就再创建新

 

复制代码
class WorkerPool
{
    /**
     * @var 忙的数组
     */
    private array $occupiedWorkers = [];

    /**
     * @var 清闲的数组
     */
    private array $freeWorkers = [];
    //拿对象
    public function get(): MyObj
    {
        if (count($this->freeWorkers) == 0) {
            $worker = new MyObj();
        } else {
            $worker = array_pop($this->freeWorkers);
        }
        $this->occupiedWorkers[spl_object_hash($worker)] = $worker;
        return $worker;
    }
    //放回对象
    public function dispose(MyObj $worker)
    {
        $key = spl_object_hash($worker);
        if (isset($this->occupiedWorkers[$key])) {
            unset($this->occupiedWorkers[$key]);
            $this->freeWorkers[$key] = $worker;
        }
    }
    public function count(): int
    {
        return count($this->occupiedWorkers) + count($this->freeWorkers);
    }
}


$pool = new WorkerPool();
$worker1 = $pool->get();
$pool->dispose($worker1);
$worker2 = $pool->get();
复制代码

 

posted @   唯一客服系统开发笔记  阅读(259)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2019-10-13 [PHP] 配置vscode的语法检测消除提示Cannot validate since no PHP executable is set
2019-10-13 [Linux] deepin系统添加PHP仓库源出错Error: could not find a distribution template for Deepin/stable
点击右上角即可分享
微信分享提示
1
chat with us