design-patterns

Форк
0
52 строки · 1.1 Кб
1
<?php
2

3
namespace App\Creational\Pool;
4

5
class WorkerPool implements \Countable
6
{
7
    /**
8
     * @var StringReverseWorker[]
9
     */
10
    private array $occupiedWorkers = [];
11

12
    /**
13
     * @var StringReverseWorker[]
14
     */
15
    private array $freeWorkers = [];
16

17
    /**
18
     * @return int
19
     */
20
    public function count(): int
21
    {
22
        return \count($this->occupiedWorkers) + \count($this->freeWorkers);
23
    }
24

25
    /**
26
     * @return StringReverseWorker
27
     */
28
    public function get(): StringReverseWorker
29
    {
30
        if (\count($this->freeWorkers) === 0) {
31
            $worker = new StringReverseWorker();
32
        } else {
33
            $worker = array_pop($this->freeWorkers);
34
        }
35

36
        $this->occupiedWorkers[spl_object_hash($worker)] = $worker;
37

38
        return $worker;
39
    }
40

41
    /**
42
     * @param StringReverseWorker $worker
43
     */
44
    public function dispose(StringReverseWorker $worker): void
45
    {
46
        $key = spl_object_hash($worker);
47
        if (isset($this->occupiedWorkers[$key])) {
48
            unset($this->occupiedWorkers[$key]);
49
            $this->freeWorkers[$key] = $worker;
50
        }
51
    }
52
}
53

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.