Hôm nay cafedev tiếp tục làm thêm series mới học tất cả các Design Pattern đang và đã được dùng nhiều, phổ biến trong thực tế hiện nay. Ace có thể tham khảo tại series Design Pattern tại đây.

Bài này chúng ta sẽ tìm hiểu chi tiết về mọi thứ về Design Pattern cho người chưa biết gì và bắt đầu học và tìm hiểu về nó trước khi đi làm. 

Lưu ý: Kiến thức về Design Pattern rất thiết thực vì nó luôn được áp dụng trong thực tế khi đi làm của các bạn. Đặc biệt, phỏng vấn luôn hỏi về nó.

1. Design Pattern là gì?

Một Design Pattern cung cấp một giải pháp chung có thể tái sử dụng cho các vấn đề chung xảy ra trong thiết kế phần mềm. Pattern thường hiển thị các mối quan hệ và tương tác giữa các lớp hoặc đối tượng. Ý tưởng là để tăng tốc quá trình phát triển bằng cách cung cấp mô hình thiết kế / phát triển đã được kiểm nghiệm, chứng minh. Design Pattern là các cách độc lập với ngôn ngữ lập trình để giải quyết một vấn đề chung. Điều đó có nghĩa là một Design Pattern đại diện cho một ý tưởng, không phải một cách triển khai cụ thể trên ngôn ngữ lập trình cụ thể nào. Bằng cách sử dụng các Design Pattern, bạn có thể làm cho code của mình linh hoạt hơn, có thể tái sử dụng và có thể bảo trì.

Không bắt buộc phải thực hiện các Design Pattern trong dự án của bạn. Các Design Pattern không dành cho việc phát triển dự án. Các Design Pattern dành cho việc giải quyết vấn đề chung. Bất cứ khi nào có nhu cầu, bạn phải thực hiện một mô hình phù hợp để tránh những vấn đề như vậy trong tương lai. Để tìm ra Pattern nào để sử dụng. Bạn chỉ cần cố gắng hiểu các Design Pattern và mục đích của chúng. Chỉ đến lúc đó, bạn mới có thể chọn đúng. 

2. Mục tiêu

Hiểu mục đích và cách sử dụng của từng Design Pattern. Vì vậy, bạn sẽ có thể chọn và triển khai đúng Pattern nếu cần. 

Ví dụ: 

Ví dụ, trong nhiều tình huống thực tế, chúng ta chỉ muốn tạo một thể hiện của một lớp. Ví dụ, chỉ có thể có một tổng thống đang hoạt động của đất nước tại một thời điểm bất kể danh tính cá nhân. Pattern này được gọi là Singleton Pattern. Các ví dụ phần mềm khác có thể là một kết nối DB duy nhất được chia sẻ bởi nhiều đối tượng vì việc tạo một kết nối DB riêng biệt cho mọi đối tượng sẽ rất tốn kém. Tương tự, có thể có một trình quản lý cấu hình hoặc trình quản lý lỗi duy nhất trong một ứng dụng xử lý tất cả các vấn đề thay vì tạo nhiều trình quản lý. 

 3. Các loại Design Pattern

Chủ yếu có ba loại Design Pattern: 

  1. Creational 

Các Design Pattern này đều nói về khởi tạo lớp hoặc tạo đối tượng. Các Pattern này có thể được phân loại thêm thành các Class-creational Pattern và các object-creational Pattern. Trong khi các Pattern tạo lớp sử dụng hiệu quả kế thừa trong quá trình khởi tạo, các Pattern tạo đối tượng sử dụng ủy quyền một cách hiệu quả để hoàn thành công việc.
Các Creational Design Pattern: Factory Method, Abstract Factory, Builder, Singleton, Object Pool và Prototype. (Chúng ta sẽ tìm hiểu sau này)

4. Trường hợp sử dụng của Creational Design Pattern

  • Giả sử nhà phát triển muốn tạo một lớp DBConnection đơn giản để kết nối với cơ sở dữ liệu và muốn truy cập cơ sở dữ liệu tại nhiều vị trí từ code, thông thường những gì nhà phát triển sẽ làm là tạo một phiên bản của lớp DBConnection và sử dụng nó để thực hiện các hoạt động cơ sở dữ liệu bất cứ khi nào cần thiết. Điều này dẫn đến việc tạo nhiều kết nối từ cơ sở dữ liệu với mỗi phiên bản của lớp DBConnection sẽ có một kết nối riêng với cơ sở dữ liệu. Để giải quyết vấn đề này, chúng ta tạo lớp DBConnection như một lớp singleton, để chỉ một phiên bản của DBConnection được tạo và một kết nối duy nhất được thiết lập. Bởi vì chúng ta có thể quản lý Kết nối DB thông qua một phiên bản để chúng ta có thể kiểm soát cân bằng tải, các kết nối không cần thiết, v.v.
    2) Giả sử bạn muốn tạo nhiều phiên bản cùng loại và muốn đạt được khớp nối lỏng lẻo thì bạn có thể sử dụng Pattern Factory. Một lớp thực hiện Design Factory Pattern như một cầu nối giữa nhiều lớp. Hãy xem xét một ví dụ về việc sử dụng nhiều máy chủ cơ sở dữ liệu như SQL Server và Oracle. Nếu bạn đang phát triển một ứng dụng sử dụng cơ sở dữ liệu SQL Server làm backend, nhưng trong tương lai cần thay đổi cơ sở dữ liệu thành oracle, bạn sẽ cần phải sửa đổi tất cả code của mình, để các Design Pattern nhà máy duy trì khớp nối lỏng lẻo và dễ dàng triển khai, chúng ta nên chuyển sang factory đạt được khớp nối lỏng lẻo và tạo ra loại vật thể tương tự.
  1. Structural

Các Design Pattern này nhằm tổ chức các lớp và đối tượng khác nhau để tạo thành các cấu trúc lớn hơn và cung cấp chức năng mới.
Các Structural Design Pattern:Adapter, Bridge, Composite, Decorator, Facade, Flyweight, Private Class Data, and Proxy.(Ace sẽ được học trong series này) 

5. Trường hợp sử dụng của mô hình thiết kế cấu trúc

1) Khi 2 interfaces không tương thích với nhau và muốn thiết lập mối quan hệ giữa chúng thông qua bộ adapter, nó được gọi là adapter Design Pattern. Adapter Pattern chuyển đổi interfaces của một lớp thành một interfaces hoặc lớp khác mà khách hàng mong đợi, tức là bộ điều hợp(Adapter) cho phép các lớp hoạt động cùng nhau mà không thể vì không tương thích. vì vậy trong các loại tình huống không tương thích này, chúng ta có thể sử dụng Pattern bộ điều hợp.

  1. Behavioral


Behavioral Pattern sẽ xác định các cách giao tiếp chung giữa các đối tượng và tương tác những Pattern này.
Các Behavioral Pattern như Chain of responsibility, Command, Interpreter, Iterator, Mediator, Memento, Null Object, Observer, State, Strategy, Template method, Visitor

 6. Trường hợp sử dụng của Design Pattern hành vi

  1. Template Pattern xác định một khung của một thuật toán trong một hoạt động trì hoãn một số bước cho các lớp con, phương thức của Pattern này cho phép các lớp con khai báo lại các bước nhất định của một thuật toán mà không thay đổi cấu trúc thuật toán. Ví dụ: trong dự án của bạn, bạn muốn hoạt động của mô-đun có thể mở rộng, để chúng ta có thể làm cho mô-đun hoạt động theo những cách mới và khác nhau khi các yêu cầu của ứng dụng thay đổi hoặc để đáp ứng nhu cầu của các ứng dụng mới. Tuy nhiên, không ai được phép thực hiện thay đổi code nguồn đối với nó, tức là bạn có thể thêm nhưng không thể sửa đổi cấu trúc trong các tình huống đó mà developer có thể dùng template Design Pattern.

Cài ứng dụng cafedev để dễ dàng cập nhật tin và học lập trình mọi lúc mọi nơi tại đây.

Tài liệu từ cafedev:

Nếu bạn thấy hay và hữu ích, bạn có thể tham gia các kênh sau của cafedev để nhận được nhiều hơn nữa:

Chào thân ái và quyết thắng!

Đăng ký kênh youtube để ủng hộ Cafedev nha các bạn, Thanks you!