0
0
Lập trình
Hưng Nguyễn Xuân 1
Hưng Nguyễn Xuân 1xuanhungptithcm

Mô Hình Thiết Kế Factory trong Javascript: Cách Tạo Đối Tượng Một Cách Linh Hoạt

Đăng vào 3 ngày trước

• 4 phút đọc

Chào Mừng Năm Mới và Giới Thiệu Về Factory Design Pattern

Trước khi bắt đầu, chúc tất cả các bạn trong cộng đồng một năm mới an khang, sức khỏe dồi dào và đạt nhiều thành công trong sự nghiệp cũng như cuộc sống! ❤️

Tổng Quan Về Factory Design Pattern

Factory Design Pattern là một trong những mẫu thiết kế thuộc nhóm Creational Design Pattern, giúp đơn giản hóa việc tạo đối tượng trong lập trình. Mẫu thiết kế này cung cấp một giao diện chung (có thể là Class hoặc hàm) nhằm tăng tính linh hoạt và khả năng mở rộng của ứng dụng.


Ví Dụ Minh Họa Cụ Thể

Để dễ hiểu hơn về Factory Design Pattern, chúng ta sẽ cùng xem qua một ví dụ cụ thể. Trong ví dụ này, chúng ta sẽ tạo hai lớp đối tượng là CatDog, sau đó xây dựng một lớp Factory gọi là AnimalFactory với phương thức create nhằm tạo các đối tượng theo loại mà chúng ta muốn.

Bước 1: Tạo các lớp Cat và Dog

javascript Copy
class Cat { 
    constructor(options) {
        this.name = options.name;
    }
}
class Dog { 
    constructor(options) {
        this.name = options.name;
    }
}

Bước 2: Tạo lớp AnimalFactory

javascript Copy
class AnimalFactory {
    create(type, options) {
        if(type === 'cat') return new Cat(options);
        else if(type === 'dog') return new Dog(options);
    }
}

Sử Dụng AnimalFactory

javascript Copy
var animalFactory = new AnimalFactory();
var dog = animalFactory.create('dog', {name: 'Pi'});
console.log(dog); // {name: 'Pi'}

Như vậy, việc tạo đối tượng giờ đây trở nên đơn giản hơn nhiều thông qua phương thức create trong lớp AnimalFactory. Tuy nhiên, một vấn đề phát sinh khi bạn muốn mở rộng và thêm loại đối tượng mới.

Vấn Đề Khi Mở Rộng

Khi cần thêm đối tượng Bird, bạn sẽ phải chỉnh sửa lại phương thức create trong lớp AnimalFactory như sau:

javascript Copy
class Bird { 
    constructor(options) {
        this.age = options.age;
    }
}
class AnimalFactory {
    create(type, options) {
        if(type === 'cat') return new Cat(options);
        else if(type === 'dog') return new Dog(options);
        else if(type === 'bird') return new Bird(options); // Thêm điều kiện cho Bird
    }
}

Giải Pháp Hiệu Quả Hơn

Để tránh việc sửa đổi thường xuyên trong phương thức create, chúng ta có thể sử dụng một đối tượng để quản lý việc ánh xạ các lớp.

javascript Copy
var objectMapping = {
    cat: Cat,
    dog: Dog,
    bird: Bird
}
class AnimalFactory {
    create(type, options) {
        let animal = objectMapping[type];
        return new animal(options);
    }
}

Với cách này, khi cần thêm một loại động vật mới, bạn chỉ cần thêm nó vào objectMapping mà không cần chỉnh sửa phương thức create. Phương pháp này giúp tuân thủ nguyên tắc Open/Closed Principle trong SOLID, nghĩa là phải mở để mở rộng và đóng để sửa đổi.

Ứng Dụng Mapping Trong JavaScript

Ngoài ra, bạn cũng có thể áp dụng cách viết ánh xạ tương tự trong việc xử lý nhiều điều kiện trong mã của mình. Ví dụ:

javascript Copy
let objMapping = {
    OrgID: {
        Caption: 'Cơ cấu tổ chức',
        ShortName: 'CCTC',
        dataType: 1
    },
    JobID: {
        Caption: 'Vị trí công việc',
        dataType: 2
    }
}
function handleMapping(o) {
    if(objMapping[o.displayField]) {
        o = {
            ...o,
            ...objMapping[o.displayField]
        }
    }
}

Với cách tiếp cận này, bạn không phải sửa đổi hàm handleMapping mỗi khi thêm điều kiện ánh xạ mới, giúp mã nguồn trở nên dễ quản lý hơn.

Kết Luận

Áp dụng Factory Design Pattern giúp việc tạo đối tượng trở nên đơn giản và hiệu quả hơn. Hi vọng bài viết này đã mang đến cho bạn những kiến thức bổ ích về mẫu thiết kế này. Cảm ơn bạn đã theo dõi! 😊
source: viblo

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào