首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 設計模式:原型模式與 clone 深複製應用

     編輯:PHP 相關知識

PHP 設計模式:原型模式與 clone 深複製應用

原型模式同屬建立型模式,透過複製現有原型物件建立新實例,避免重複初始化開銷,適合大型物件或昂貴建構過程。

核心概念

  • 先建立完整初始化的原型物件。
  • 新物件透過 clone 關鍵字複製原型。
  • PHP clone 執行淺複製;若需深複製,實作 __clone() 魔術方法處理參考屬性。

範例:畫布物件複製

<?php
namespace Baobab;

class Canvas {
    private $shapes = [];
    public function init() {
        // 昂貴初始化:載入資源、建立預設圖層等
        $this->shapes = ['background' => 'white'];
    }
    public function rect($x, $y, $w, $h) {
        $this->shapes[] = "rect($x,$y,$w,$h)";
    }
    public function draw() {
        echo "Canvas: " . implode(', ', $this->shapes) . "\n";
    }
    // 若 $shapes 含有物件參考,需實作 __clone 深複製
}

// 使用
$prototype = new Baobab\Canvas();
$prototype->init();

$canvas1 = clone $prototype;
$canvas1->rect(3, 6, 4, 12);
$canvas1->draw();

$canvas2 = clone $prototype;
$canvas2->rect(10, 20, 5, 5);
$canvas2->draw();

輸出

Canvas: background=white, rect(3,6,4,12)
Canvas: background=white, rect(10,20,5,5)

適用場景

  1. 物件建構成本高(大量資料載入、複雜運算)。
  2. 系統需大量相似物件,僅少數屬性不同。
  3. 避免子類別爆炸(如工廠模式需為每種變體建立子類)。

注意事項

  • PHP clone 為淺複製,含有物件屬性時必須實作 __clone() 深複製。
  • 序列化/反序列化亦可達成深複製,但效能較差。
  • 原型模式常與原型管理器(登記表)搭配,依標識快速取得原型。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved