欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺談PHP設(shè)計模式之對象池模式Pool

 更新時間:2021年05月26日 08:57:09   作者:phpyu  
對象池模式是一種提前準備了一組已經(jīng)初始化了的對象『池』而不是按需創(chuàng)建或者銷毀的創(chuàng)建型設(shè)計模式。對象池客戶端會向?qū)ο蟪刂姓埱笠粋€對象,然后使用這個返回的對象執(zhí)行相關(guān)操作。當(dāng)客戶端使用完畢,它將把這個特定類型的工廠對象返回給對象池,而不是銷毀掉這個對象。

目的

在初始化實例成本高,實例化率高,可用實例不足的情況下,對象池可以極大地提升性能。在創(chuàng)建對象(尤其是通過網(wǎng)絡(luò))時間花銷不確定的情況下,通過對象池在可期時間內(nèi)就可以獲得所需的對象。

無論如何,對象池模式在需要耗時創(chuàng)建對象方面,例如創(chuàng)建數(shù)據(jù)庫連接,套接字連接,線程和大型圖形對象(比方字體或位圖等),使用起來都是大有裨益的。在某些情況下,簡單的對象池(無外部資源,只占內(nèi)存)可能效率不高,甚至?xí)袚p性能。

UML 類圖

代碼

WorkerPool.php

<?php

namespace DesignPatterns\Creational\Pool;

class WorkerPool implements \Countable
{
    /**
    * @var StringReverseWorker[]
    */
    private $occupiedWorkers = [];

    /**
    * @var StringReverseWorker[]
    */
    private $freeWorkers = [];

    public function get(): StringReverseWorker
    {
        if (count($this->freeWorkers) == 0) {
            $worker = new StringReverseWorker();
        } else {
            $worker = array_pop($this->freeWorkers);
        }

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

        return $worker;
    }

    public function dispose(StringReverseWorker $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);
    }
}

StringReverseWorker.php

<?php

namespace DesignPatterns\Creational\Pool;

class StringReverseWorker
{
    /**
    * @var \DateTime
    */
    private $createdAt;

    public function __construct()
    {
        $this->createdAt = new \DateTime();
    }

    public function run(string $text)
    {
        return strrev($text);
    }
}

測試

Tests/PoolTest.php

<?php

namespace DesignPatterns\Creational\Pool\Tests;

use DesignPatterns\Creational\Pool\WorkerPool;
use PHPUnit\Framework\TestCase;

class PoolTest extends TestCase
{
    public function testCanGetNewInstancesWithGet()
    {
        $pool = new WorkerPool();
        $worker1 = $pool->get();
        $worker2 = $pool->get();

        $this->assertCount(2, $pool);
        $this->assertNotSame($worker1, $worker2);
    }

    public function testCanGetSameInstanceTwiceWhenDisposingItFirst()
    {
        $pool = new WorkerPool();
        $worker1 = $pool->get();
        $pool->dispose($worker1);
        $worker2 = $pool->get();

        $this->assertCount(1, $pool);
        $this->assertSame($worker1, $worker2);
    }
}

以上就是淺談PHP設(shè)計模式之對象池模式Pool的詳細內(nèi)容,更多關(guān)于PHP設(shè)計模式之對象池模式Pool的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • PHP中使用grpc服務(wù)的教程詳解

    PHP中使用grpc服務(wù)的教程詳解

    這篇文章主要為大家詳細介紹了PHP中使用grpc服務(wù)的教程相關(guān)知識,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-03-03
  • php $_SESSION會員登錄實例分享

    php $_SESSION會員登錄實例分享

    這篇文章主要為大家詳細介紹了php $_SESSION會員登錄實例,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-03-03
  • 解析php中var_dump,var_export,print_r三個函數(shù)的區(qū)別

    解析php中var_dump,var_export,print_r三個函數(shù)的區(qū)別

    本篇文章是對php中var_dump,var_export,print_r三個函數(shù)的區(qū)別進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06
  • php7和php5的詳細對比

    php7和php5的詳細對比

    這篇文章主要介紹了php7和php5詳細對比,對此感興趣的同學(xué),可以自己研究下
    2021-04-04
  • PHP的5個安全措施小結(jié)

    PHP的5個安全措施小結(jié)

    多年來,PHP一直是一個穩(wěn)定的、廉價的運行基于web應(yīng)用程序的平臺。像大多數(shù)基于web的平臺一樣,PHP也是容易受到外部攻擊的
    2012-07-07
  • php實現(xiàn)與python進行socket通信的方法示例

    php實現(xiàn)與python進行socket通信的方法示例

    這篇文章主要介紹了php實現(xiàn)與python進行socket通信的方法,結(jié)合實例形式分析了php使用自定義類發(fā)送socket請求數(shù)據(jù)及Python接收socket數(shù)據(jù)并處理請求等相關(guān)操作技巧,需要的朋友可以參考下
    2017-08-08
  • php中幾種常見安全設(shè)置詳解

    php中幾種常見安全設(shè)置詳解

    PHP本身再老版本有一些問題,比如在 php4.3.10和php5.0.3以前有一些比較嚴重的bug,所以推薦使用新版。
    2010-04-04
  • PHP使用feof()函數(shù)讀文件的方法

    PHP使用feof()函數(shù)讀文件的方法

    這篇文章主要介紹了PHP使用feof()函數(shù)讀文件的方法,以實例形式對比了正確與錯誤的用法,闡明了feof()函數(shù)的使用技巧,需要的朋友可以參考下
    2014-11-11
  • 詳解PHP執(zhí)行定時任務(wù)的實現(xiàn)思路

    詳解PHP執(zhí)行定時任務(wù)的實現(xiàn)思路

    這篇文章主要介紹了詳解PHP執(zhí)行定時任務(wù)的幾種實現(xiàn)思路,PHP的定時任務(wù)功能必須通過和其他工具結(jié)合才能實現(xiàn),們就來深入的解析幾種常見的php定時任務(wù)的思路
    2015-12-12
  • PHP中的淺復(fù)制與深復(fù)制的實例詳解

    PHP中的淺復(fù)制與深復(fù)制的實例詳解

    這篇文章主要介紹了PHP中的淺復(fù)制與深復(fù)制的實例詳解的相關(guān)資料,希望通過本文能幫助到大家,讓大家理解掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-10-10

最新評論