© 2026 Laravel

Prototype Pattern: Clone đối tượng linh hoạt

2 phút đọc
#design-patterns #php #creational

#1. Vấn đề

Khi việc khởi tạo một đối tượng quá phức tạp (phải query DB, tính toán nhiều bước), việc dùng new lại mỗi lần rất tốn kém. Bạn cần một bản sao (clone) của đối tượng cũ để chỉnh sửa.

#2. Định nghĩa

Prototype Pattern (Nhóm Creational) cho phép sao chép các đối tượng hiện có mà không cần biết chính xác class của chúng. Trong PHP, chúng ta tận dụng keyword clone.

#3. Giải pháp + Code mẫu

abstract class Prototype {
    abstract public function __clone();
}

class Invoice extends Prototype {
    public function __clone() {
        // Thực hiện deep copy nếu cần thiết
    }
}

// Sử dụng
$invoice = new Invoice();
$newInvoice = clone $invoice;

#4. Khi nào áp dụng & Mẹo

  • Ứng dụng: Khi hệ thống cần tạo nhiều đối tượng gần giống nhau (VD: báo cáo, template invoice).
  • Mẹo: Trong Laravel Eloquent, clone model sẽ sao chép toàn bộ thuộc tính, rất tiện để tạo bản ghi mới từ bản ghi cũ.

#5. Câu hỏi phỏng vấn

  • Q: Tại sao Prototype cần __clone()? Khi clone object chứa object con (vd: Address), mặc định PHP chỉ copy tham chiếu. __clone giúp tạo “deep copy” để object mới không ảnh hưởng object gốc.

#6. Kết luận

Prototype là cách nhanh nhất để khởi tạo đối tượng khi chi phí “new” quá cao.

Bài viết liên quan

Design Pattern là gì?

Tìm hiểu Design Pattern là gì, cách hoạt động, sự khác biệt với thuật toán và phân loại 3 nhóm Design Pattern phổ biến trong lập trình.

4 phút đọc