Đây là bài viết nằm trong Series NestJS thực chiến, các bạn có thể xem toàn bộ bài viết ở link: https://viblo.asia/s/nestjs-thuc-chien-MkNLr3kaVgA
Đặt vấn đề 📜 Xin chào mọi người, ở bài viết trước chúng ta đã tìm hiểu về State Design Pattern, hôm nay chúng ta sẽ cùng nối tiếp bài viết với một Design Pattern không kém phần hấp dẫn chính là Builder 👷🏗️🏢. Như thường lệ chúng ta sẽ nói qua về kha...
Design Pattern Observer là một mẫu thiết kế thuộc nhóm Behavioral Patterns (hành vi), cho phép một đối tượng (gọi là Subject hoặc Observable) thông báo đến các đối tượng khác (Observers) khi trạng thái của nó thay đổi. Điều này giúp tách biệt giữa các thành phần, tăng tính mở rộng và giảm sự phụ thuộc lẫn nhau. Cơ bản về Observer Pattern Các thành phần chính::
- Subject (Observable): Đối tượng ...
Design Pattern Command là một trong những mẫu thiết kế hành vi (Behavioral Design Pattern), cho phép bạn đóng gói một yêu cầu dưới dạng một đối tượng, từ đó bạn có thể:
- Tham số hóa các đối tượng với các yêu cầu khác nhau.
- Xếp hàng hoặc lưu trữ lịch sử các lệnh (ví dụ: undo/redo).
- Tách người gửi lệnh (invoker) khỏi người thực thi lệnh (receiver).
Cấu trúc của Command Pattern Command patte...
Adapter Pattern là gì? Adapter cho phép giao tiếp giữa 2 interface không tương thích bằng cách bao bọc (wrap) một lớp hiện tại bằng một lớp adapter để nó có thể sử dụng interface mong muốn.
Ví dụ minh họa:
Giả sử bạn có một interface MediaPlayer chỉ phát nhạc .mp3, nhưng bạn lại muốn phát .mp4 hoặc .vlc, bạn có thể tạo một MediaAdapter để chuyển đổi định dạng đó.
Cấu trúc Adapter Pattern
Cl...
Design Pattern Builder là một mẫu thiết kế thuộc nhóm Creational Patterns trong Java, dùng để tạo đối tượng phức tạp từng bước một. Nó rất hữu ích khi một object có nhiều tham số (đặc biệt là khi một số tham số là tùy chọn), giúp code dễ đọc, dễ bảo trì, và tránh việc phải dùng quá nhiều constructor hoặc setter.
Tổng quan về Builder Pattern Khi một class có quá nhiều constructor (overloading) ...
Trong giới võ lâm, Builder Pattern được biết đến như một trong những design pattern phổ biến thuộc nhóm Creational Pattern, giúp tạo ra đối tượng phức tạp theo cách linh hoạt và dễ đọc hơn. Có thể nhiều bạn đã gặp nó ngay trong các dòng code xung quanh mình nhưng không để ý. Với các ngôn ngữ lập trình trước đây, cách triển khai Builder Pattern có thể hơi dài dòng phức tạp, nhưng mình để ý thấy ...
Đây là bài viết nằm trong Series NestJS thực chiến, các bạn có thể xem toàn bộ bài viết ở link: https://viblo.asia/s/nestjs-thuc-chien-MkNLr3kaVgA Đặt vấn đề 📜 Xin chào mọi người, Design Pattern trước giờ luôn là một chủ đề rất hot trong giới lập trình của chúng ta, nó không nhất thiết là điều kiện cần nhưng nó lại là điều kiện đủ để chúng ta đạt được mức lương mong muốn trong hành trình theo đ...
Mở đầu Trong quá trình phát triển phần mềm, lập trình viên thường xuyên đối mặt với những bài toán kỹ thuật phức tạp, đòi hỏi nhiều thời gian và kinh nghiệm để tìm ra hướng giải quyết hiệu quả.
Sau khi vượt qua những thử thách này, các lập trình viên sẽ tích lũy được những kinh nghiệm quý báu. Tuy nhiên, để chia sẻ các cách giải quyết tối ưu đó cho cộng đồng – giúp những lập trình viên khác kh...
Tính khoảng cách giữa các điểm địa lý là một yêu cầu phổ biến trong nhiều ứng dụng. Trong bài viết này, chúng ta sẽ từng bước cải thiện một hệ thống tính khoảng cách đơn giản bằng cách áp dụng các design pattern phổ biến, biến nó thành một giải pháp linh hoạt và dễ bảo trì.
Vấn đề
Chúng ta cần tính khoảng cách giữa hai điểm địa lý với các yêu cầu sau:
- Hỗ trợ nhiều phương thức tính toán (đư...
Để thực thi mẫu thiết kế này thì đã có 1 framework hỗ trợ việc xây dựng đó là Apache Commons Chain
Mục đích: hỗ trợ việc xây dựng các ứng dụng có khả năng mở rông cao, nơi các bước xử lý được tổ chức thành một chuỗi (chain) và mỗi bước xử lý là một thành phần có thể tái sử dụng (handler)
Lớp ChainBase là một lớp triển khai mặc định của interface Chain trong Apache Commons Chain. Nó cho phép t...
Lời nói đầu Design Pattern là giải pháp điển hình 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ế được tạo sẵn mà bạn có thể tùy chỉnh để giải quyết vấn đề thiết kế thường gặp trong mã của mình. Bạn không thể chỉ tìm một mẫu và sao chép nó vào chương trình của mình, theo cách bạn có thể làm với các hàm hoặc thư viện có sẵn. Mẫu không phải là một đoạn mã cụ thể, ...

Top Gun: Maverick là một bộ phim rất thành công do Tom Cruise thủ vai chính (Maverick). Có một sự thật mà ít người biết đến là bộ phim lấy bối cảnh của một sự kiện có thật và đặc biệt hơn còn liên quan mật thiết đến chiến tranh Việt Nam.
Năm 1969, sau khi đắc cử tổng thống không lâu, Nixon tuyên bố chiến dịch Việt Nam hóa chiến tranh, bước đầu là không kích vào các cứ điểm của quân ta nhưng ...

Chào mừng anh em trở lại với series Design Pattern thực chiến trong lập trình hướng đối tượng. Khi đối tượng có nhiều tham số hoặc cần nhiều bước khởi tạo, sử dụng các phương thức khởi tạo (constructor) truyền thống thường gây ra nhiều bất cập, có thể nêu ra như khó đọc, khó mở rộng đến dễ mắc lỗi.
Builder Pattern xuất hiện như một giải pháp hữu hiệu, giúp chúng ta tách biệt quá trình xây dự...

Chào mừng anh em trở lại với series Design Pattern thực chiến trong lập trình hướng đối tượng.
Singleton là một trong những design pattern cơ bản và quan trọng nhất trong nhóm Creational Pattern.
Mục tiêu chính của nó là đảm bảo một class chỉ có duy nhất một instance trong suốt vòng đời của chương trình và cung cấp một điểm truy cập toàn cục tới instance này.
Điều này rất hữu ích trong các t...

Chào mừng anh em trở lại với series Design Pattern thực chiến trong lập trình hướng đối tượng. Trong bài viết lần này, chúng ta sẽ tiếp tục khám phá một trong những pattern cơ bản khác – Prototype Pattern. Đây là một công cụ hữu ích giúp anh em tối ưu việc tạo ra các object mới mà không cần phải thiết lập lại toàn bộ từ đầu. Hãy cùng nhau đi sâu vào khái niệm, cơ chế hoạt động, cũng như cách ...

Ở bài viết trước, chúng ta đã cùng nhau tìm hiểu về Factory Method và cách nó giúp đơn giản hóa việc khởi tạo các đối tượng trong các hệ thống phức tạp. Tiếp nối series Design Pattern thực chiến, bài viết này sẽ đưa bạn đến với một design pattern khác cũng không kém phần quan trọng và phổ biến trong lập trình hướng đối tượng: Abstract Factory.
I. Khái niệm và kiến trúc Trích từ cuốn Design p...

Factory method và các design pattern nói chung, chắc hẳn anh em đã nghe đến cả trăm ngàn lần rồi. Nhưng liệu anh em đã bao giờ dừng lại và tự hỏi: “Các thư viện Java ứng dụng Factory Method như thế nào?” Đây sẽ là bài mở đầu trong một series thực chiến, nơi chúng ta sẽ cùng nhau khám phá cách mà các thư viện Java ứng dụng design pattern này, cũng như các biến thể thú vị của nó. Hãy cùng tôi b...
Giới thiệu
Khi bạn muốn có nhiều thuật toán riêng của bạn và muốn thay đổi theo runtime.
Khi bạn muốn code của bạn không phải if else hay switch case tùm lum thứ.
Khi bạn muốn tách biệt thuật toán và tuân theo nguyên lý của SOLID (ở đây là S, O và L).
Khi bạn muốn sử dụng lại các thuật toán khác.
Đúng rồi, đây cũng là dấu hiệu mà bạn nên sử dụng mẫu thiết kế Strategy.
Vậy...
Strategy là ...
Giới thiệu Mỗi ngày chúng ta đều phải thức dậy, mở mắt, đi đánh răng, rửa mặt, ăn sáng, đi làm, đi về nhà, ăn uống, đánh răng, đi ngủ, cứ liên tục lặp đi lặp lại, chúng ta hoạt động như một cái máy được lập trình sẵn những hành động mà chỉ cần thức dậy là đã phải làm ngay. Việc định nghĩa ra thứ cần làm trong một ngày mà lặp lui lặp lại, gọi là định nghĩa ra một bộ khung làm việc. Điều đặt biệt...
Trong bài viết này, chúng ta sẽ tìm hiểu về Decorator trong TypeScript, một tính năng mạnh mẽ giúp mở rộng và thay đổi hành vi của các class, method, property và parameter. Decorator giúp làm cho code trở nên dễ đọc và dễ bảo trì hơn. Hãy cùng khám phá cách sử dụng và những lợi ích mà Decorator mang lại.
- Decorator là gì?
Decorator là một function đặc biệt được dùng để thay đổi hoặc mở rộng...
