Factory Pattern & Singleton Pattern Trong Python: Hướng Dẫn Chi Tiết

Đăng ngày: 20/06/2026 • Tác giả: Quản trị viên
Factory Pattern & Singleton Pattern Trong Python: Hướng Dẫn Chi Tiết

Factory Pattern & Singleton Pattern Trong Python: Hướng Dẫn Chi Tiết

Sau khi tìm hiểu về MVC, chúng ta tiếp tục với Factory Pattern và Singleton Pattern – hai mẫu thiết kế phổ biến trong lập trình hướng đối tượng (OOP).

📌 Nội dung chính:

1️⃣ Factory Pattern là gì?
2️⃣ Cách triển khai Factory Pattern trong Python
3️⃣ Singleton Pattern là gì?
4️⃣ Cách triển khai Singleton Pattern trong Python
5️⃣ So sánh Factory và Singleton

1. Factory Pattern Là Gì?

Factory Pattern (Mẫu thiết kế nhà máy) là một mẫu thiết kế tạo đối tượng mà không cần chỉ định lớp cụ thể. Nó giúp:

✔️ Ẩn đi logic khởi tạo phức tạp
✔️ Linh hoạt mở rộng – dễ thêm đối tượng mới mà không sửa đổi code cũ
✔️ Tăng tính đóng gói – người dùng chỉ cần gọi Factory thay vì tạo trực tiếp

2. Cách Triển Khai Factory Pattern Trong Python

💡 Ví dụ: Ta có một hệ thống tạo ra các loại động vật khác nhau (Chó, Mèo).

Bước 1: Tạo các lớp đối tượng

class Dog:
    def speak(self):
        return "Gâu gâu!"

class Cat:
    def speak(self):
        return "Meo meo!"

Bước 2: Tạo Factory

class AnimalFactory:
    @staticmethod
    def get_animal(animal_type):
        animals = {
            "dog": Dog(),
            "cat": Cat()
        }
        return animals.get(animal_type.lower(), None)

Bước 3: Sử Dụng Factory

if __name__ == "__main__":
    animal = AnimalFactory.get_animal("dog")
    if animal:
        print(animal.speak())  # Output: Gâu gâu!

    animal = AnimalFactory.get_animal("cat")
    if animal:
        print(animal.speak())  # Output: Meo meo!

💡 Lợi ích:
✔ Tách biệt logic tạo đối tượng
✔ Dễ dàng mở rộng – chỉ cần thêm vào Factory

3. Singleton Pattern Là Gì?

Singleton Pattern (Mẫu thiết kế đơn nhất) đảm bảo chỉ có một thể hiện (instance) duy nhất của lớp được tạo ra.

✔️ Tránh lãng phí bộ nhớ
✔️ Dùng trong quản lý tài nguyên hệ thống (database, config, logger,…)

4. Cách Triển Khai Singleton Pattern Trong Python

Cách 1: Dùng Biến Lớp

class Singleton:
    _instance = None  # Biến lớp lưu instance duy nhất

    def __new__(cls):
        if cls._instance is None:
            cls._instance = super(Singleton, cls).__new__(cls)
        return cls._instance

Cách 2: Dùng Decorator

def singleton(cls):
    instances = {}

    def get_instance(*args, **kwargs):
        if cls not in instances:
            instances[cls] = cls(*args, **kwargs)
        return instances[cls]

    return get_instance

@singleton
class Config:
    def __init__(self):
        self.data = "Cấu hình hệ thống"

config1 = Config()
config2 = Config()
print(config1 is config2)  # Output: True (Cùng một instance)

5. So Sánh Factory Pattern Và Singleton Pattern

Tiêu chí Factory Pattern Singleton Pattern
Mục đích Tạo đối tượng mà không cần chỉ định lớp cụ thể Đảm bảo chỉ có một instance duy nhất
Linh hoạt Dễ mở rộng (thêm lớp mới vào Factory) Không linh hoạt (chỉ có một instance)
Ứng dụng Khi cần tạo nhiều loại đối tượng Khi cần quản lý tài nguyên hệ thống (Database, Logger,…)

6. Khi Nào Sử Dụng Factory Và Singleton?

✅ Dùng Factory Pattern khi:

  • Cần tạo nhiều loại đối tượng mà không cần biết trước lớp cụ thể
  • Muốn đơn giản hóa quá trình khởi tạo

✅ Dùng Singleton Pattern khi:

  • Cần quản lý một đối tượng duy nhất trong toàn bộ ứng dụng (VD: Database, Config, Logger)

📌 Ví dụ thực tế:

  • Factory Pattern dùng trong ORM (SQLAlchemy, Django ORM) để tạo nhiều loại model khác nhau.
  • Singleton Pattern dùng để quản lý connection database trong hệ thống lớn.

7. Tổng Kết

✔ Factory Pattern – tạo đối tượng linh hoạt, dễ mở rộng.
✔ Singleton Pattern – đảm bảo chỉ có một instance duy nhất.
✔ Hiểu rõ ứng dụng để sử dụng đúng trong dự án thực tế.

💡 Bạn có câu hỏi gì về Factory hoặc Singleton? Hãy để lại bình luận bên dưới!

Bài viết liên quan