Giới thiệu về mẫu thiết kế
Thuộc phần Lập trình hướng đối tượng trong hành trình Python của Coddy. Bài học 44 trên 64.
Mẫu thiết kế là những giải pháp có thể tái sử dụng cho các vấn đề thường gặp trong thiết kế phần mềm. Chúng giống như bản thiết kế mà bạn có thể tùy chỉnh để giải quyết những vấn đề thiết kế lặp lại trong code.
Hãy xem các mẫu thiết kế như những khuôn mẫu đã được kiểm chứng mà các nhà phát triển giàu kinh nghiệm dùng để giải quyết những vấn đề tương tự. Khi bạn nói “Mình đã dùng mẫu Singleton”, các nhà phát triển khác sẽ hiểu ngay cấu trúc code của bạn.
Đây là ví dụ đơn giản cho thấy vì sao các mẫu lại quan trọng:
# Không dùng mẫu thiết kế: cách làm rườm rà
class DatabaseConnection:
def __init__(self):
self.connection = "Connected to database"
# Vấn đề: tạo nhiều kết nối
db1 = DatabaseConnection()
db2 = DatabaseConnection() # Lãng phí: tạo thêm một kết nốiVới mẫu thiết kế, bạn có một giải pháp tốt hơn:
# Với mẫu Singleton, cách tiếp cận có kiểm soát
class DatabaseConnection:
_instance = None
def __new__(cls):
if cls._instance is None:
cls._instance = super().__new__(cls)
cls._instance.connection = "Connected to database"
return cls._instance
# Giờ chỉ có một kết nối
db1 = DatabaseConnection()
db2 = DatabaseConnection()
print(db1 is db2) # True, cùng một instanceTại sao nên dùng mẫu thiết kế:
- Khả năng tái sử dụng: Giải pháp có thể áp dụng cho các vấn đề tương tự
- Giao tiếp: Từ vựng chung giữa các nhà phát triển
- Các phương pháp tốt nhất: Giải pháp đã được kiểm chứng qua thời gian
- Khả năng bảo trì: Code có cấu trúc tốt, được tổ chức rõ ràng
Bạn sẽ học được gì trong loạt bài này:
Các mẫu khởi tạo (cách tạo đối tượng):
- Mẫu Singleton: Chỉ có một instance
- Mẫu Factory: Tạo đối tượng mà không cần chỉ định chính xác lớp
Các mẫu cấu trúc (cách các đối tượng được kết hợp):
- Mẫu Adapter: Kết hợp các giao diện không tương thích
- Mẫu Decorator: Thêm chức năng mà không thay đổi cấu trúc
Mẫu hành vi (cách các đối tượng tương tác):
- Mẫu Observer: Thông báo cho nhiều đối tượng về các thay đổi
- Mẫu Strategy: Chuyển đổi thuật toán linh hoạt
- Mẫu Command: Đóng gói các yêu cầu thành đối tượng
Mỗi bài học về mẫu thiết kế sẽ đề cập đến:
- Mẫu thiết kế giải quyết vấn đề gì
- Cách triển khai mẫu đó trong Python
- Khi nào nên sử dụng mẫu đó
- Ví dụ thực tế
Điểm chính: Các mẫu thiết kế là những giải pháp đã được kiểm chứng cho các vấn đề lập trình thường gặp. Chúng cung cấp một hệ thuật ngữ chung và các phương pháp hay nhất, giúp code dễ bảo trì, linh hoạt và dễ hiểu hơn. Bạn sẽ học 7 mẫu thiết kế thiết yếu mà mọi nhà phát triển Python nên biết.
Tự làm thử
Bài học này không có thử thách code.
Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Lập trình hướng đối tượng
1Nền tảng về lập trình hướng đối tượng
Tệp bên ngoàiGiới thiệu về lập trình hướng đối tượngLớp và đối tượngTham số selfPhương thứcThuộc tínhPhương thức khởi tạo (__init__)Ôn tập: máy tính đơn giản4Kế thừa
Kế thừa cơ bảnHàm super()Ghi đè phương thứcKế thừa đa lớpThứ tự phân giải phương thứcÔn tập: hệ thống phân cấp nhân viên2Decorator
Giới thiệu về decoratorDecorator thuộc tínhDecorator phương thức tĩnhDecorator phương thức lớp5Tính đa hình
Xem lại cách ghi đè phương thứcKiểu gõ vịtLớp và phương thức trừu tượngThiết kế giao diệnÔn tập: máy tính hình học8Các khái niệm OOP nâng cao
Kết hợp và kế thừaMixinPhương thức tĩnh và phương thức lớpDecorator lớpTrình quản lý ngữ cảnhTự luyện tập: Trình biên dịch Python online