Pattern thuộc nhóm Creational Pattern (Khởi tạo)
#1. Problem & Motivation
Khởi tạo đối tượng tốn quá nhiều tài nguyên (truy vấn DB, load file nặng). Nhân bản (clone) nhanh hơn nhiều so với việc khởi tạo mới từ đầu (new).
#2. Định nghĩa
Prototype Pattern tạo ra các đối tượng mới dựa trên việc sao chép (clone) một đối tượng đã tồn tại (đối tượng mẫu).
#3. Implementation
Sử dụng từ khóa clone trong PHP:
class Soldier {
public function __clone() {
// Xử lý deep copy các đối tượng con nếu cần
}
}
$s1 = clone $original;
#4. Liên hệ Laravel
$model->replicate() trong Eloquent chính là áp dụng Prototype để tạo ra một bản sao của Model mà chưa lưu vào Database.
#5. Kết luận
Dùng khi khởi tạo tốn kém, hoặc muốn giữ một “bản mẫu” để sinh ra các đối tượng con có trạng thái tương tự.