ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

PHP 对象池模式

2020-06-23 10:06:47  阅读:220  来源: 互联网

标签:function 对象 worker 模式 key freeWorkers PHP public pool


  1. 原文:https://designpatternsphp.readthedocs.io/zh_CN/latest/Creational/Pool/README.html
  2.  1 <?php
     2 
     3 namespace Design\Patterns\Creational\Pool;
     4 
     5 use Countable;
     6 
     7 
     8 class WorkerPool implements Countable
     9 {
    10     /**
    11      * @var StringReverseWorker[]
    12      */
    13     private $occupiedWorkers = [];
    14 
    15     /**
    16      * @var StringReverseWorker[]
    17      */
    18     private $freeWorkers = [];
    19 
    20     public function get(): StringReverseWorker
    21     {
    22         if (count($this->freeWorkers) == 0) {
    23             $worker = new StringReverseWorker();
    24         } else {
    25             $worker = array_pop($this->freeWorkers);
    26         }
    27 
    28         $this->occupiedWorkers[spl_object_hash($worker)] = $worker;
    29 
    30         return $worker;
    31     }
    32 
    33     public function dispose(StringReverseWorker $worker)
    34     {
    35         $key = spl_object_hash($worker);
    36 
    37         if (isset($this->occupiedWorkers[$key])) {
    38             unset($this->occupiedWorkers[$key]);
    39             $this->freeWorkers[$key] = $worker;
    40         }
    41     }
    42 
    43     public function count(): int
    44     {
    45         return count($this->occupiedWorkers) + count($this->freeWorkers);
    46     }
    47 }
    48 
    49 class StringReverseWorker
    50 {
    51     private $noncestr;
    52 
    53     public function __construct()
    54     {
    55         $this->noncestr = time().mt_rand(100,999);
    56     }
    57 
    58     public function run(string $text)
    59     {
    60         return strrev($text);
    61     }
    62 }
    63 
    64 $pool = new WorkerPool();
    65 $w1 = $pool->get();
    66 $w2 = $pool->get();
    67 
    68 var_dump($w1);
    69 echo "<hr/>";
    70 var_dump($w2);
    71 echo "<hr/>";
    72 
    73 $pool->dispose($w1);
    74 $w3 = $pool->get();
    75 var_dump($w3);
    测试

     

标签:function,对象,worker,模式,key,freeWorkers,PHP,public,pool
来源: https://www.cnblogs.com/bneglect/p/13180493.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有