Chắc chắn! Một trong những mẫu thiết kế phổ biến nhất trong JavaScript là mẫu thiết kế “Factory Method Pattern“,
được sử dụng để tạo đối tượng mà không cần xác định lớp đối tượng sẽ được tạo ra. Dưới đây là một ví dụ về mẫu thiết kế này:
class Product { constructor(name) { this.name = name; } display() { console.log(`Product: ${this.name}`); } } class ProductFactory { createProduct(type) { switch (type) { case 'product1': return new Product('Product 1'); case 'product2': return new Product('Product 2'); default: throw new Error('Unknown product type'); } } } const factory = new ProductFactory(); const product1 = factory.createProduct('product1'); const product2 = factory.createProduct('product2'); product1.display(); // Product: Product 1 product2.display(); // Product: Product 2
Giải thích:
creatorProduct (type): Đây là lớp định nghĩa phương thức createProduct(type)
để tạo các sản phẩm dựa trên tham số type
. Nó sử dụng kỹ thuật Factory Method
để quyết định lớp sản phẩm nào sẽ được tạo.
Trong lĩnh vực phát triển phần mềm, mô hình phương pháp nhà máy mang lại một số lợi ích quan trọng, bao gồm:
Tách rời việc tạo đối tượng và sau đó sử dụng nó: Định hướng phương pháp xưởng giúp phân biệt giữa logic sử dụng đối tượng và logic tạo đối tượng. Điều này làm cho mã nguồn dễ bảo trì hơn và giảm sự phụ thuộc giữa các lớp.
Mở rộng dễ dàng: Khi cần thêm các lớp mới hoặc thay đổi cách tạo đối tượng, chúng ta chỉ cần thay đổi lớp Factory và điều này sẽ không ảnh hưởng đến các phần khác của mã nguồn. Điều này tăng khả năng linh hoạt khi mở rộng mã nguồn.
Tạo đối tượng cần thiết: Mẫu phương pháp xưởng cho phép bạn tạo đối tượng dựa trên các điều kiện hoặc tham số đầu vào để đáp ứng nhu cầu cụ thể của ứng dụng.
Giảm thiểu tính phức tạp của mã nguồn: Do logic tạo đối tượng được tập trung tại một nơi khi sử dụng Factory Method Pattern, mã nguồn thường dễ hiểu và gọn gàng hơn.
Tăng khả năng tái sử dụng: Mẫu phương pháp nhà máy cho phép tái sử dụng mã nguồn tạo đối tượng trong nhiều ứng dụng.
// Đầu tiên, chúng ta định nghĩa một interface chung cho các sản phẩm class Product { use() { throw new Error("Phương thức use() phải được ghi đè"); } } // Định nghĩa một vài sản phẩm cụ thể class ConcreteProductA extends Product { use() { console.log("Sử dụng sản phẩm A"); } } class ConcreteProductB extends Product { use() { console.log("Sử dụng sản phẩm B"); } } // Factory Method để tạo các đối tượng class Creator { createProduct(type) { switch(type) { case 'A': return new ConcreteProductA(); case 'B': return new ConcreteProductB(); default: throw new Error("Loại sản phẩm không hợp lệ"); } } } // Sử dụng Factory Method để tạo và sử dụng các sản phẩm const creator = new Creator(); const productA = creator.createProduct('A'); productA.use(); // Sử dụng sản phẩm A const productB = creator.createProduct('B'); productB.use(); // Sử dụng sản phẩm B
Giải thích:
Lớp sản phẩm là giao diện chung cho tất cả các sản phẩm. Các lớp con phải ghi đè phương thức use().
Các lớp con cụ thể của lớp hàng hóa là ConcreteProductA và ConcreteProductB. Mỗi lớp cung cấp một cách để sử dụng phương thức use().
Creator là lớp định nghĩa của phương thức tạo createProduct(type) để tạo sản phẩm dựa trên tham số loại. Để quyết định lớp sản phẩm nào sẽ được tạo, nó sử dụng phương pháp xưởng.
Sử dụng:
Cuối cùng, chúng ta tạo một đối tượng Creator và tạo các sản phẩm riêng biệt bằng cách sử dụng phương thức createProduct. Sau đó, chúng ta sử dụng phương thức use để sử dụng các sản phẩm này.
Bằng cách sử dụng phương pháp này, bạn có thể thêm các loại sản phẩm mới mà không cần phải sửa đổi mã của lớp Creator, làm cho mã nguồn dễ bảo trì và mở rộng.
Xem thêm:…
#Mtips5s #Contact
Fanpage: https://www.facebook.com/mtipscoder
Group trao đổi, chia sẻ: https://www.facebook.com/groups/mtipscoder
Website: https://mtips5s.com
Youtube: https://mtips5s.com
Twitter(X): @takagiks99
Instagram: @khuongkara
Threads: @khuongkara
Google Maps: @khuongkara
Chúc các bạn thành công!
Leave A Comment