Prototype Design Pattern là một mẫu thiết kế cho phép bạn sao chép các đối tượng mà không cần phải tạo lại chúng từ đầu. Mẫu này rất hữu ích khi bạn muốn tạo ra các đối tượng mới từ một đối tượng đã tồn tại mà không cần phải biết chi tiết cách chúng được tạo ra.
Dưới đây là cách triển khai Prototype Design Pattern trong JavaScript với ví dụ minh họa:
Bước 1: Tạo Prototype
Đầu tiên, chúng ta sẽ định nghĩa một đối tượng prototype mà các đối tượng mới sẽ kế thừa từ đó.
Bước 2: Tạo hàm sao chép (clone)
Hàm này sẽ sao chép các thuộc tính của đối tượng prototype để tạo ra các đối tượng mới.
Bước 3: Sử dụng Prototype Pattern
Dưới đây là một triển khai hoàn chỉnh:
// Prototype
const carPrototype = {
init(model, year) {
this.model = model;
this.year = year;
},
getInfo() {
return `${this.year} ${this.model}`;
},
clone() {
const clone = Object.create(this);
clone.init(this.model, this.year);
return clone;
}
};
// Sử dụng Prototype
const car1 = Object.create(carPrototype);
car1.init("Toyota Camry", 2020);
const car2 = car1.clone(); // Tạo một bản sao của car1
car2.init("Honda Accord", 2021); // Thay đổi thông tin cho bản sao
console.log(car1.getInfo()); // In ra "2020 Toyota Camry"
console.log(car2.getInfo()); // In ra "2021 Honda Accord"
Giải thích mã
- Prototype: Chúng ta tạo một đối tượng
carPrototype
với các thuộc tính và phương thức như init
, getInfo
, và clone
.
init
: Phương thức này dùng để khởi tạo thông tin cho đối tượng.
getInfo
: Phương thức này trả về thông tin của xe.
clone
: Phương thức này tạo ra một bản sao mới của đối tượng dựa trên prototype.
- Sử dụng Prototype:
- Sử dụng
Object.create(carPrototype)
để tạo ra đối tượng car1
dựa trên prototype.
- Gọi
init
để khởi tạo các thuộc tính cho car1
.
- Sử dụng
car1.clone()
để tạo ra car2
, một bản sao của car1
.
- Thay đổi thông tin cho
car2
bằng cách gọi init
với các tham số mới.
Kết luận
Prototype Design Pattern cho phép bạn tạo ra các đối tượng mới một cách nhanh chóng từ các đối tượng đã tồn tại mà không cần phải xây dựng lại từ đầu. Điều này có thể giúp giảm thiểu việc sử dụng bộ nhớ và tăng cường hiệu suất. Mẫu này cũng rất hữu ích khi bạn muốn các đối tượng có một số thuộc tính chung nhưng cũng cần có những thuộc tính riêng biệt.