-
Design Pattern
- Singleton Design Pattern
- Factory Design Pattern
- Factory Method Design Pattern
- Abstract Factory Design Pattern
- Builder Design Pattern
- Prototype Design Pattern
- Object Pool Design Pattern
- Chain of Responsibility Design Pattern
- Command Design Pattern
- Interpreter Design Pattern
- Iterator Design Pattern
- Mediator Design Pattern
- Memento Design Pattern
- Observer Design Pattern
- Observer Design Pattern - Xử Lý Exception
- Strategy Design Pattern
- Template Method Design Pattern
- Visitor Design Pattern
- Null Object Design Pattern
- Adapter Design Pattern
- Bridge Design Pattern
- Composite Design Pattern
- Decorator Design Pattern
- Flyweight Design Pattern
- Proxy Design Pattern
- S.O.L.I.D
- Clean code
- Lập trình socket
- Java Core
- Multi-Thread
- Spring
- Java Web
- Memory Caching
- Message Queue
- DevOps
- Xây dựng một nền tảng
- MongoDB
- MySQL timestamp
- Properties vs yaml
- Kotlin
- Lập Trình Machine Learning với PyTorch
- Mã Nguồn Mở
- Ezy HTTP
- Free Chat
- Một số kinh nghiệm với Git
- Review cho đồng nghiệp!
- Setup Dev Environment
- Hello World
- Create a Server Project
- Handle Client Requests
- Using ezyfox-server-csharp-client
- Using ezyfox-es6-client
- Client React.js Interaction
- Build And Deploy In Local

Chắp cánh ước mơ
Nếu có 100 cuộc phỏng vấn senior Java nói riêng hay các ngôn ngữ khác nói chung thì cũng phải đến 90 cuộc phỏng vấn là hỏi về Design pattern, cơ hội đàm phán lương đây rồi, 🙂 . Vậy design pattern là gì? có gì hấp dẫn ở đây?
Định nghĩa
Design pattern là các mẫu lập trình phổ biến được xây dựng bởi các lập trình viên nhiều kinh nghiệm, nó giúp source code của chúng ta dễ đọc, dễ hiểu và dễ mở rộng về sau này. Có thể nói design pattern định nghĩa ra các tiêu chuẩn code và các mẫu lập trình mà từ đó chúng ta mới có hàng trăm nghìn thư viện lập trình như ngày hôm nay
Một số design pattern
Design pattern quan trọng như vậy, hay ho như vậy nhưng với đại bộ phận lập trình viên chúng ta nó lại không được quá chú trọng, vì chúng ta đã quá quen và phụ thuộc vào việc sử dụng các thư viện lập trình sẵn có như Spring hay JavaEE, chúng ta chỉ cần tuân theo các mẫu sẵn có của họ là được
Đối với cá nhân mình, đi vào con đường phát triển thư viện, framework thì design pattern là thứ sống còn, không thể không thành thạo. Còn đối với chúng ta nói chung, mình nghĩ việc nắm bắt được các design pattern là điều nên làm, nó sẽ giúp chúng ta tiếp cận các thư viện lập trình nhanh chóng, giống kiểu, chưa cần đọc đã hiểu phải làm thế nào rồi, 🙂
Theo ý kiến cá nhân mình, hiện có khoảng 24 design patterns phổ biến và chia thành 3 nhóm như sau:
Nhóm 1. Creational Patterns
Nhóm này được dùng để phục vụ cho việc khởi tạo đối tượng và nó bao gồm:
- Singleton: Tạo ra đối tượng sử dụng cho toàn chương trình và chỉ khởi tạo 1 lần
- Factory: Tạo ra các đối tượng theo một quy tắc nhất định
- Factory Method: Tạo ra các đối tượng theo một quy tắc nhất định, nhưng cho phép lớp thừa kế quy định đối tượng sẽ được tạo ra
- Abstract Factory: Tạo ra các đối tượng theo một quy tắc nhất định mà không cần biết kiểu của đối tượng
- Builder: Thường dùng để tạo các đối tượng readonly hay immutable
- Prototype: Thường dùng để clone 1 đối tượng từ 1 đối tượng có sẵn
- Object Pool: Dùng để tạo ra các đối tượng có thể dùng lại nhiều lần để tránh khởi tạo không cần thiết
Nhóm 2. Behavioral Patterns
Nhóm này phục vụ cho việc xử lý các hành động (action, request, event), nó bao gồm:
- Chain of Responsibility: Là một chuỗi xử lý cho một hành động
- Command: Xử lý hành động theo kiểu tương ứng
- Interpreter: Chuyên từ đối tượng này sang đối tượng khác
- Iterator: Dùng để duyệt qua một collection như bạn vẫn hay dùng vòng for với List và Set
- Mediator: Định nghĩ ra một đối tượng sử dụng chung cho các lớp, ví dụ đối tượng Graphic sẽ được sử dụng bởi các lớp Button, TextView, ...
- Memento: Dùng để quản lý trạng thái và trở lại trạng thái trước khi cần thiết, giống như undo và redo
- Observer: Lắng nghe một sự kiện sẽ xảy đến và xử lý sự kiện đó
- Strategy: Đưa ra các xử lý tương ứng với hành động xảy đến
- Template Method: Quy định trình tự gọi hàm để đảm bảo lập trình viên không bị mắc sai lầm, nếu bạn dùng Android bạn sẽ thấy các hàm onCreate, onStart, ... đây là 1 trong những design pattern quan trọng nhất của Android
- Visitor: "Thăm quan" các đối tượng trong một mảng hay 1 collection
- Null Object: Có thể hiểu đơn giản là if (value == null) do something else do something
Nhóm 3. Structural Patterns
Nhóm này phục vụ cho việc kết nối các đối tượng và mở rộng hệ thống, nó bao gồm:
- Adapter: Chuyển một interface của một class sang 1 interface của 1 class khác, cảm giác nó cũng hơi giống giống Command pattern, 😃
- Bridge: Giữ lại các phần giống nhau, và tách các phần khác nhau ra thành các lớp riêng biệt
- Composite: Kết hợp các lớp lại với nhau để tránh phải extends hay implements quá nhiều lớp và interface, ví dụ chúng ta hay có lớp service sử dụng rất nhiều lớp repo và các service khác
- Decorator: Là lớp để "trang hoàng" thêm cho đối tượng của chúng ta trước khi đưa đối tượng này vào sử dụng hoặc lưu trữ, phản hồi
- Flyweight: Dùng để chia sẻ một lượng lớn các đối tượng được khởi tạo một lần
- Proxy: Dùng để wrap lại đối tượng thực tế, thông thường chúng ta sử dụng wrap lại các đối tượng của thư viện bằng đối tượng của chúng ta, để dễ dàng thay đổi thư viện sau này
Kết luận
Với ba nhóm cơ bản và 24 các mẫu lập trình cơ bản sẽ giúp chúng ta tạo ra những mã nguồn dễ đọc, dễ hiểu và dễ bảo trỉ hơn trong tương lai. Mặc dù khó để học và để áp dụng vào trong dự án thực tế nhưng chúng ta hãy kiên trì nhé, nó xứng đáng để bỏ thời gian và công sức để học tập và theo đuổi
-
Design Pattern
- Singleton Design Pattern
- Factory Design Pattern
- Factory Method Design Pattern
- Abstract Factory Design Pattern
- Builder Design Pattern
- Prototype Design Pattern
- Object Pool Design Pattern
- Chain of Responsibility Design Pattern
- Command Design Pattern
- Interpreter Design Pattern
- Iterator Design Pattern
- Mediator Design Pattern
- Memento Design Pattern
- Observer Design Pattern
- Observer Design Pattern - Xử Lý Exception
- Strategy Design Pattern
- Template Method Design Pattern
- Visitor Design Pattern
- Null Object Design Pattern
- Adapter Design Pattern
- Bridge Design Pattern
- Composite Design Pattern
- Decorator Design Pattern
- Flyweight Design Pattern
- Proxy Design Pattern
- S.O.L.I.D
- Clean code
- Lập trình socket
- Java Core
- Multi-Thread
- Spring
- Java Web
- Memory Caching
- Message Queue
- DevOps
- Xây dựng một nền tảng
- MongoDB
- MySQL timestamp
- Properties vs yaml
- Kotlin
- Lập Trình Machine Learning với PyTorch
- Mã Nguồn Mở
- Ezy HTTP
- Free Chat
- Một số kinh nghiệm với Git
- Review cho đồng nghiệp!
- Setup Dev Environment
- Hello World
- Create a Server Project
- Handle Client Requests
- Using ezyfox-server-csharp-client
- Using ezyfox-es6-client
- Client React.js Interaction
- Build And Deploy In Local