Design Patterns là gì?
Design patterns là các giải pháp đã được tối ưu hóa, được tái sử dụng cho các vấn đề lập trình mà chúng ta gặp phải hàng ngày. Nó là một khuôn mẫu đã được suy nghĩ, giải quyết trong tình huống cụ thể.
Xem thêm:
Các vấn đề mà bạn gặp phải có thể bạn sẽ tự nghĩ ra cách giải quyết nhưng có thể nó chưa phải là tối ưu. Design Pattern giúp bạn giải quyết vấn đề một cách tối ưu nhất, cung cấp cho bạn các giải pháp trong lập trình OOP.
Nó không phải là ngôn ngữ cụ thể nào cả. Design patterns có thể thực hiện được ở phần lớn các ngôn ngữ lập trình. Ta thường gặp nó nhất trong lập trình OOP.
Tại sao phải sử dụng Design Patterns?
- Giúp sản phẩm của chúng ta linh hoạt, dễ dàng thay đổi và bảo trì hơn.
- Giúp lập trình viên loại bỏ các vấn đề nợ kỹ thuật (Technical Debt).
- Design Pattern giúp bạn tái sử dụng mã lệnh và dễ dàng mở rộng.
- Nó là tập hơn những giải pháp đã được tối ưu hóa, đã được kiểm chứng để giải quyết các vấn đề trong software engineering. Vậy khi bạn gặp bất kỳ khó khăn gì, design patterns là kim chỉ nam giúp bạn giải quyết vấn đề thay vì tự tìm kiếm giải pháp cho một vấn đề đã được chứng minh.
- Design pattern cung cấp giải pháp ở dạng tổng quát, giúp tăng tốc độ phát triển phần mềm bằng cách đưa ra các mô hình test, mô hình phát triển đã qua kiểm nghiệm.
- Dùng lại các design pattern giúp tránh được các vấn đề tiềm ẩn có thể gây ra những lỗi lớn, dễ dàng nâng cấp, bảo trì về sau.
- Giúp cho các lập trình viên có thể hiểu code của người khác một cách nhanh chóng. Mọi thành viên trong team có thể dễ dàng trao đổi với nhau để cùng xây dựng dự án mà k mất quá nhiều thời gian.
Khi nào nên sử dụng Design pattern?
Giúp cho chương trình của mình thực sự đơn giản. Việc sử dụng các design pattern sẽ giúp chúng ta giảm được thời gian và công sức suy nghĩ ra các cách giải quyết cho những vấn đề đã có lời giải.
Bạn có thể đọc qua cuốn "Head First Design Patterns" để có cái nhìn tổng quát hơn về design pattern.
Tuy vậy không phải lúc nào bạn cũng cần thiết kế "chuẩn chỉ" theo Design Pattern. Việc áp dụng lý thuyết cứng nhắc sẽ khiến phần mềm thiếu sự mềm dẻo. Như ông cha ta đã nói "Giết gà thì dùng dao mổ gà, giết trâu thì dùng dao mổ trâu". Hãy vận dụng Design Pattern một cách linh hoạt, sáng tạo và mềm dẻo giống như bản chất của "phần mềm".
Ngược với Design Pattern là anti-patterns, tương tự như paradox (nghịch lý). Mọi kết quả đều có thuận và có nghịch, có âm và dương. Anti-pattern là một góc nhìn ngược với Design Pattern. Xem thêm: Lập trình phần mềm: Bí quyết sử dụng anti-pattern nên tránh để phát triển sản phẩm bền vững.
Phân loại Design Patterns
Có 3 nhóm chính sau:
- Creational Pattern (nhóm khởi tạo) gồm: Abstract Factory, Factory Method, Singleton, Builder, Prototype. Nó sẽ giúp bạn trong việc khởi tạo đối tượng, như bạn biết để khởi tạo bạn phải sử dụng từ khóa new, nhóm Creational Pattern sẽ sử dụng một số thủ thuật để khởi tạo đối tượng mà bạn sẽ không nhìn thấy từ khóa này.
- Structural Pattern (nhóm cấu trúc) gồm: Adapter, Bridge, Composite, Decorator, Facade, Proxy và Flyweight. Nó dùng để thiết lập, định nghĩa quan hệ giữa các đối tượng.
- Behavioral Pattern gồm: Interpreter, Template Method, Chain of Responsibility, Command, Iterator, Mediator, Memento, Observer, State, Strategy và Visitor. Nhóm này dùng trong thực hiện các hành vi của đối tượng.
Để học Design Patterns cần nắm vững kiến thức gì?
- Bao gồm 4 đặc tính cơ bản của OOP: Thừa kế, Đa hình, Trừu tượng, Bao đóng.
- Khái niệm interface và abstract: 2 khái niệm này rất quan trọng và xuyên suốt từ khi bạn bắt đầu học lập trình. Để hiểu và áp dụng 2 khái niệm này có thể sẽ mất một thời gian, nhưng khi bạn nắm chắc nó bạn sẽ thấy nó thực sự cần thiết.
- Bỏ tư duy theo lối cấu trúc hoặc tuyến tính (linear), nâng tư duy theo hướng đối tượng OOP, hướng thiết kế (OOAD).
Phân loại
Hệ thống các mẫu design pattern được chia thành 3 nhóm: nhóm Creational (5 mẫu), nhóm Structural (7 mẫu) và nhóm Behavioral (11 mẫu). Có thể ví 3 nhóm đặc điểm này tương tự nhóm đặc điểm của một vòng đời của con người từ lúc sinh ra (Creational - bao gồm cả sinh tự nhiên và thụ tinh nhân tạo!), lớn lên (hình thành thể chất - Structural) và phát triển hành vi xã hội (Behavioral).
Creational Patterns
- Abstract Factory
- Builder
- Factory
- Prototype
- Singleton
Structural Patterns
- Adapter
- Bridge
- Composite
- Decorator
- Facade
- Flyweight
- Proxy
Behavioral Patterns
- Chain of responsibility
- Command
- Interpreter
- Iterator
- Mediator
- Memento
- Observer
- State
- Strategy
- Template method
- Visitor
Kết luận
- Design patterns là đoạn mô tả, hoặc khuôn mẫu để giải quyết một vấn đề nào đó.
- Không phải là thiết kế cuối cùng.
- Cho phép code được tối ưu hóa, dễ tái sử dụng. Người khác dễ dàng nắm bắt được code của bạn. Dễ nâng cấp sửa chữa.
- Giúp cho lập trình viên có thể communicate với nhau.