Nếu bạn thích sưu tập những cuốn sách kinh điển về lập trình hướng đối tượng (OOP), Design Patterns: Elements of Reusable Object-Oriented Software là lựa chọn không thể bỏ qua. Dù bạn đang làm việc với bất kỳ ngôn ngữ OOP nào, cuốn sách này đều mang đến những kiến thức thật sự bổ ích.





1. Đôi nét về tác giả
Năm 1994, cuốn sách khoa học máy tính mang tính biểu tượng này đã được xuất bản lần đầu tiên. Bốn tác giả của cuốn sách: Erich Gamma, Richard Helm, Ralph Johnson và John Vlissides, đã được mệnh danh là “Bộ tứ quyền lực” (Gang of Four hay viết tắt là GoF). Mặc dù đã được xuất bản từ hàng chục năm trước, nó vẫn là một cuốn sách về lập trình hướng đối tượng bán chạy nhất hiện nay.
GoF đã viết cuốn sách trong bối cảnh ngôn ngữ C++ nhưng nó vẫn rất phù hợp với Java. Và cả 2 ngôn ngữ này đều được sử dụng để lập trình hướng đối tượng. Các tác giả thông qua kinh nghiệm của họ đã tìm thấy mẫu thiết kế chung của các công ty lớn sử dụng C++. Đặc biệt, các mẫu thiết kế này không chỉ được sử dụng duy nhất với C++, nó có thể áp dụng với bất kỳ ngôn ngữ hướng đối tượng nào khác như C#, PHP, Python, Java.

Sách Design Patterns: Elements of Reusable Object-Oriented Software
GoF viết cuốn sách này hướng đến các nhà phát triển đã có một số kinh nghiệm lập trình hướng đối tượng, nhưng đang tìm kiếm giải pháp để giải quyết các vấn đề một cách nhanh chóng. Các mẫu thiết kế của GoF có thể tái sử dụng và có tính linh hoạt cao, được chia thành 3 loại:
* Mẫu khởi tạo – Creational Pattern: Tạo các đối tượng.
* Mẫu cấu trúc – Structural Pattern: Cung cấp mối quan hệ giữa các đối tượng.
* Mẫu hành vi – Behavioral Pattern: Giúp xác định cách các đối tượng tương tác.


2. Nội dung sách Design Patterns: Elements of Reusable Object-Oriented Software
Hai chương đầu là phần giới thiệu và giải thích lý do tồn tại của các mẫu thiết kế, cách chúng nên được sử dụng, các biểu tượng tốt và xấu… Các mẫu thiết kế hướng đối tượng được chia thành 3 loại như đã chia sẻ ở mục trên.
Mỗi mẫu được mô tả bằng một lời giải thích đầy đủ, một sơ đồ UML, sự tương tác giữa các phần tử mẫu, cũng như một số giải pháp triển khai. Các tác giả không thể trình bày tất cả các giải pháp xử lý vấn đề vì nó còn phụ thuộc vào ngôn ngữ bạn đang sử dụng.

Sách chia các mẫu thiết kế OOP thành 3 loại
Chi tiết về 23 mẫu thiết kế hướng đối tượng được chia sẻ trong sách:



2.1. Mẫu thiết kế khởi tạo
* Factory Method: Tạo các đối tượng không chỉ định lớp chính xác để tạo.
* Abstract Factory: Cho phép tạo các đối tượng không cần chỉ định loại cụ thể của chúng.
* Builder: Sử dụng để tạo các đối tượng phức tạp.
* Prototype: Tạo một đối tượng mới từ một đối tượng hiện có.
* Singleton: Đảm bảo chỉ một thể hiện của một đối tượng được tạo.

2.2. Mẫu thiết kế kiến trúc
* Adapter: Cho phép hai lớp không tương thích hoạt động cùng nhau. Bằng cách bao bọc một giao diện xung quanh một trong các lớp hiện có.
* Bridge: Tách một phần trừu tượng để hai lớp có thể khác nhau một cách độc lập.
* Composite: Đưa một nhóm đối tượng thành một đối tượng duy nhất.
* Facade: Cung cấp một giao diện đơn giản cho một đối tượng cơ bản phức tạp hơn.
* Flyweight: Giảm chi phí của các mô hình đối tượng phức tạp.
* Proxy: Cung cấp giao diện trình giữ chỗ cho đối tượng cơ bản. Để kiểm soát quyền truy cập, giảm chi phí hoặc giảm độ phức tạp.

2.3. Mẫu thiết kế hành vi
* Chain of Responsibility: Ủy quyền các lệnh cho một chuỗi các đối tượng xử lý.
* Command: Tạo các đối tượng đóng gói các hành động và tham số.
* Interpreter: Triển khai một ngôn ngữ chuyên biệt.
* Iterator: Truy cập tuần tự các phần tử của một đối tượng. Nhưng không để lộ phần biểu diễn cơ bản của nó.
* Mediator: Cho phép giao tiếp giữa các lớp khác nhau.
* Memento: Cung cấp khả năng khôi phục một đối tượng về trạng thái trước đó của nó.
* Observer: Là một mẫu xuất bản/ đăng ký. Cho phép một số đối tượng quan sát thấy một sự kiện.
* State: Cho phép một đối tượng thay đổi hành vi của nó khi trạng thái bên trong của nó thay đổi.
* Strategy: Cho phép một trong số các thuật toán được chọn nhanh chóng tại thời điểm thực thi.
* Template Method: Định nghĩa khung của thuật toán là một lớp trừu tượng. Cho phép các lớp con của nó cung cấp hành vi cụ thể.
* Visitor: Tách một thuật toán khỏi một cấu trúc đối tượng. Bằng cách di chuyển hệ thống phân cấp của các phương thức vào một đối tượng.

Dù bạn đã thành thạo hay chưa có nhiều kinh nghiệm với các ngôn ngữ lập trình hướng đối tượng, hãy tìm đọc cuốn sách Design Patterns: Elements of Reusable Object-Oriented Software ngay từ bây giờ. Để lại bình luận bên dưới bài viết nếu bạn cần hỗ trợ nhiều hơn nhé.