12. Object Pool模式

场景

一台机器有20个对外的TCP/IP端口,当请求超过20个时,多余的请求就会等待,直到有空缺的端口出现。当一个端口出现故障的时候,自动切换到一个新的端口,没有端口空闲则等待。

经验丰富的王叔叔面对这样的需求,想也没想就给出了答案。

“建立一个端口池,对所有的端口进行管理,每个端口都是一个对象。这样就不存在对象被销毁和创建的代价了。”

“同时,我们还要做好对象的分发工作,避免因为资源竞争而导致死锁。”

总结

意图:在创建对象比较昂贵,对象数量有限制,需要管理对象的重用。
实现:如果可以创建的对象数量有限,或者池的大小有限制,可以使用一个数组来实现。如果只有一个,就可以结合singleton模式来实现。
带来的问题:

  1. 因为资源竞争而导致死锁
  2. 创建和销毁对象的代价是不是大于对象池的维护。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容