Số 42, ngõ 178 Thái Hà, Đống Đa, Hà Nội
0985 136 895

Design patterns là gì?– Tại sao phải học Design pattern

Trong thế giới lập trình của chúng ta, luôn tồn tại một khái niệm bất hủ đó là design pattern. Nó khá là quan trọng và mọi lập trình viên đều phải biết. Và nó có thể coi như một nguyên tắc không thể thiếu trong các framework hay các dự án lớn.Vậy design patterns là gì mà lại quan trọng đến thế, hãy cùng Vicoders đi tìm hiểu nhé!

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ể rồi.

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. Và 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?

Design patterns là gì?
Design patterns là gì?

Như đã định nghĩa ở trên thiết kế mẫu là 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 sẽ 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.

Dưới đây sẽ là  những lý do mà tại sao lập trình viên phải sử dụng Design patterns  khi lập trình:

  • 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.
  • Giúp bạn tái sử dụng mã lệnh, giúp cho dự án của chúng ta dễ bảo trì, nâng cấp và mở rộng
  • 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 code của chúng ta sẽ dễ đọc hơn, giúp cho các lập trình viên khác có thể hiểu code 1 cách nhanh chóng (có thể hiểu là tính communicate). 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.
  • 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.

Phân loại Design Patterns

Về cơ bản design pattern sẽ được chia làm 3 dạng chính:

  • Creational Pattern
  • Structural Pattern
  • Behavioral Pattern
Design patterns là gì?
Design patterns là gì?

Creational Pattern (nhóm kiến tạo)

  • Abstract Factory: Cung cấp một interface cho việc tạo lập các đối tượng (có liên hệ với nhau) mà không cần qui định lớp khi hay xác định lớp cụ thể( concrete) tạo mỗi đối tượng. Tần suất sử dụng cao.
  • Builder: Tách rời việc xây dựng (construction) một đối tượng phức tạp khỏi biểu diễn của nó sao cho cùng một tiến trình xây dựng có thể tạo được các biểu diễn khác nhau. Tần suất sử dụng: trung bình thấp.
  • Factory Method: Định nghĩa Interface để sinh ra đối tượng nhưng để cho lớp con quyết định lớp nào được dùng để sinh ra đối tượng Factory method. Cho phép một lớp chuyển quá trình khởi tạo đối tượng cho lớp con. Tần suất sử dụng: cao
  • Prototype: Qui định loại của các đối tượng cần tạo bằng cách dùng một đối tượng mẫu. Tạo mới nhờ vào sao chép đối tượng mẫu này. Tần suất sử dụng: trung bình
  • Singleton:Đảm bảo 1 class chỉ có 1 instance và cung cấp 1 điểm truy xuất toàn cục đến nó. Tần suất sử dụng: cao trung bình
  • Multiton
  • Pool
  • Simple Factory
  • Static Factory

Structural Pattern (nhóm cấu trúc)

Giúp chúng ta thiết lập, định nghĩa quan hệ giữa các đối tượng. Nhóm này gồm có 11 mẫu design là:

  • Adapter/ Wrapper: Do vấn đề tương thích, thay đổi interface của một lớp thành một interface khác phù hợp với yêu cầu người sử dụng lớp. Tần suất sử dụng: cao trung bình
  • Bridge: Tách rời ngữ nghĩa của một vấn đề khỏi việc cài đặt. Mục đích để cả hai bộ phận(ngữ nghĩa và cài đặt) có thể thay đổi độc lập nhau. Tần suất sử dụng: trung bình
  • Composite: Tổ chức các đối tượng theo cấu trúc phân cấp dạng cây. Tất cả các đối tượng trong cấu trúc được thao tác theo một cách thuần nhất như nhau. Tạo quan hệ thứ bậc bao gộp giữa các đối tượng. Client có thể xem đối tượng bao gộp và bịbao gộp như nhau -> khả năng tổng quát hoá trong code của client -> dễ phát triển, nâng cấp, bảo trì. Tần suất sử dụng: cao trung bình
  • Data Mapper
  • Design patterns là gì
    Design patterns là gì

    Decorator: Gán thêm trách nhiệm cho đối tượng (mở rộng chức năng) vào lúc chạy (dynamically).Tần suất sử dụng: trung bình

  • Dependency Injection
  • Facade: Cung cấp một interface thuần nhất cho một tập hợp các interface trong một “hệ thống con”(subsystem). Nó định nghĩa 1 interface cao hơn các interface có sẵn để làm cho hệ thống con dễ sử dụng hơn.Tần suất sử dụng: cao
  • Fluent Interface
  • Flyweight: Sử dụng việc chia sẻ để thao tác hiệu quả trên một số lượng lớn đối tượng “cở nhỏ”(chẳng hạn paragraph, dòng, cột, ký tự…). Tần suất sử dụng: thấp
  • Registry
  • Proxy: Cung cấp đối tượng đại diện cho một đối tượng khác để hỗ trợ hoặc kiểm soát quá trình truy xuất đối tượng đó. Đối tượng thay thế gọi là proxy. Tần suất sử dụng: cao trung bình

Behavioral patterns (nhóm ứng xử):

Nhóm này sẽ tập trung thực hiện các hành vi của đối tượng. Gồm 12 mẫu design là:

  • Chain Of Responsibilities: Khắc phục việc ghép cặp giữa bộ gởi và bộ nhận thông điệp. Tần suất sử dụng: trung bình thấp
  • Command: Mỗi yêu cầu (thực hiện một thao tác nào đó) được bao bọc thành một đối tượng. Các yêu cầu sẽ được lưu trữ và gởi đi như các đối tượng. Đóng gói request vào trong một Object , nhờ đó có thể nthông số hoá chương trình nhận request. Và thực hiện các thao tác trên request: sắp xếp, log, undo…Tần suất sử dụng: cao trung bình
  • Iterator: Truy xuất các phần tử của đối tượng dạng tập hợp tuần tự (list, array, …) mà không phụ thuộc vào biểu diễn bên trong của các phần tử. Tần suất sử dụng: cao
  • Specification:Bao bọc một họ các thuật toán bằng các lớp đối tượng. Lớp này để thuật toán có thể thay đổi độc lập đối với chương trình sử dụng thuật toán. Cung cấp một giải thuật cho phép client chọn lựa linh động một giải thuật cụ thể khi sử dụng. Tần suất sử dụng: cao trung bình
  • Memento: Hiệu chỉnh và trả lại như cũ trạng thái bên trong của đối tượng mà vẫn không vi phạm việc bao bọc dữ liệu. Tần suất sử dụng: thấp
  • Định nghĩa quan hệ giữa các đối tượng

  • Mediator: Định nghĩa một đối tượng để bao bọc việc giao tiếp giữa một số đối tượng với nhau. Tần suất sử dụng: trung bình thấp
  • Null Object.
  • Observer: Định nghĩa sự phụ thuộc một-nhiều giữa các đối tượng sao cho khi một đối tượng thay đổi trạng thái thì tất cả các đối tượng phụ thuộc nó cũng thay đổi theo. Tần suất sử dụng: cao
  • Template method:Định nghĩa phần khung của một thuật toánTần suất sử dụng: trung bình
  • Visitor: Cho phép định nghĩa thêm phép toán mới tác động lên các phần tử của một cấu trúc đối tượng. Mà không cần thay đổi các lớp định nghĩa cấu trúc đó.Tần suất sử dụng: thấp

Trong thời gian gần đây đã xuất hiện thêm 4 mẫu design nữa đó là:

  • 4.1 Delegation.
  • Service Locator.
  • Entity-Attribute-Value (EAV).

Các khái niệm cần nắm chắc khi học design pattern

  • Bốn đặc tính của OOP: Thừa kế, Đa hình, Trừu tượng, Bao đóng.
  • Khái niệm interface và abstract. Cái này cực kỳ quan trọng, để 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, nâng câp tư duy hoàn toàn theo OOP.

 

Sau khi bạn đã nắm chắc các thứ kể trên. Bạn nên bắt tay vào học Design pattern càng sớm càng tốt. Nắm vững  Design pattern sẽ giúp bạn nâng cao kỹ năng lập trình của mình.

Trong thực tế khi coding trong các project hầu hết các developer đều đã và đang sử dụng một số loại design pattern mà không hề hay biết. Tuy nhiên nếu bạn đọc và tìm hiểu kỹ hơn về mặt lý thuyết của các design pattern. Nó sẽ có ưu hóa code theo các chuẩn có sẵn, đã được đúc kết của rất nhiều developer khác cũng như thay đổi, nâng tầm tư duy code của bản thân. Nếu có thời gian rảnh rỗi, các bạn có thể tìm đọc thêm về các design pattern khác ở đây

 

Leave a comment