目的对象池模式是一种创建型设计,预先准备好一组已初始化的对象“池”,而不是按需创建或销毁它们的模型。对象池的客户端会从对象池中请求一个对象,然后使用返回的对象进行相关操作。当客户端使用完它时,它会将这种特定类型的工厂对象返回到对象池中,而不是销毁该对象。在实例初始化成本高、实例化率高、可用实例不足的情况下,对象池可以极大地提升性能。当创建一个对象(尤其是通过网络)需要一个不确定的时间时,可以通过对象池在一个可预测的时间内获得需要的对象。无论如何,对象池模式在需要耗时创建对象的领域是有益的,例如创建数据库连接、套接字连接、线程和大型图形对象(如字体或位图等)。在某些情况下,一个简单的对象池(没有外部资源,只有内存)可能效率低下甚至不利于性能。UML类图官方PHP进阶学习交流社区“点击”管理整理部分资料,BAT等一线大厂进阶知识体系已准备就绪(相关学习资料及笔试面试题)且不限于:分布式架构,高科技扩展、高性能、高并发、服务器性能调优、TP6、laravel、YII2、Redis、Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等知识点高级进阶干货代码WorkerPool.phpfreeWorkers)==0){$worker=newStringReverseWorker();}else{$worker=array_pop($this->freeWorkers);}$this->occupiedWorkers[spl_object_hash($worker)]=$worker;返回$工人;}publicfunctiondispose(StringReverseWorker$worker){$key=spl_object_hash($worker);如果(isset($this->occupiedWorkers[$key])){unset($this->occupiedWork呃[$键]);$this->freeWorkers[$key]=$worker;}}publicfunctioncount():int{returncount($this->occupiedWorkers)+count($this->freeWorkers);}}StringReverseWorker.phpcreatedAt=new\DateTime();}publicfunctionrun(string$text){returnstrrev($text);}}测试Tests/PoolTest.phpget();$worker2=$pool->get();$this->assertCount(2,$pool);$this->assertNotSame($worker1,$worker2);}公共函数testCanGetSameInstanceTwiceWhenDisposingItFirst(){$pool=newWorkerPool();$worker1=$pool->get();$pool->dispose($worker1);$worker2=$pool->get();$this->assertCount(1,$pool);$this->assertSame($worker1,$worker2);}}PHP互联网架构师成长之路*《设计模式》终极指南PHP互联网架构师50K成长指南+行业解题大纲(持续更新中)面试10家公司,收到9份offer,2020年PHP面试题如果你喜欢我的文章,如果你想与更多资深开发者交流学习,获得更多各大厂商面试相关技术咨询指导,欢迎加入我们的群-点此(群号856460874)如果内容不错,希望大家支持鼓励喜欢/喜欢,欢迎一起交流;另外,大家有什么问题,建议,想看的内容都可以在评论里提出
