Design patterns

Tổng hợp các kiến thức về design patterns

1. Design patterns là gì?

Design Pattern là một giải pháp chung để giải quyết các vấn đề phổ biến khi thiết kế phần mềm trong lập trình hướng đối tượng OOP.

Nói tóm lại design pattern là các mẫu thiết kế để giải quyết các bài toán phổ biến hiện nay, design patterns là kim chỉ nam giúp kỹ sư thiết kế phần mềm thiết kế hệ thống tối ưu, là chìa khóa để giao tiếp hiệu quả giữa các kỹ sư, và lập trình viên.

Để học design pattern hiệu quả thì chúng ta cần ôn lại một số kiến thức về OOP.

1.1 Các khái niêm cơ bản OOP cần nhớ

  • Class / Object : Đối tượng là các thành phần phải có định danh, chu trình sống,sự độc lập tương đối với các đối tượng khác.

    • Các đối tượng thường gặp: con người, vật thể, tổ chức, vật lý, không gian, thời gian...

    • Đối tượng chính / Đối tượng phụ

Object
  • Attributes (thuộc tính): Không có ý nghĩa rõ ràng khi đứng một mình

    • Sự phụ thuộc:

      • Phụ thuộc một đối tượng -> thuộc tính của đối tương

      • Phụ thuộc nhiều đối tượng -> thuộc tính quan hệ

    • Các loại thuộc tính:

      • Định danh (thường của đối tượng)

      • Phân loại

      • Thời gian

      • Không gian

      • Định lượng

      • ...

  • Methods (phương thức) : là hành động của đối tượng thường sẽ có dạng V + Danh từ . Ví dụ getName(), addStudent(), deleteName(),...

  • Public/protected/ private

  • Static/ virtual

1.2 Các quan hệ trong OOP

Các quan hệ trong OOP gồm có :

  • Generalization (tổng quát hóa) :

    • Về ý nghĩa: Class B kế thừa từ Class A, Class B là trường hợp đặc biệt của Class A và Class A là trường hợp tổng quát của Class B

    • Về code: Class B có đầy đủ các thuộc tính và phương phức của class A.

Inheritance
  • Association : là quan hệ ở mặt tổng quát có nghĩa là

    • Trong class A có thuộc tính có kiểu là class B

    • Hoặc trong class B có thuộc tính có kiểu là class A

Association
  • Aggregation :

    • Class A có chứa object của class B

    • Object X của class A bị hủy thì Object Y của class B vẫn có thể tồn tại

    • Ví dụ: xe hơi sẽ bao gồm: 1 động cơ, 2 bánh xe, ... Khi phòng học bị hủy nhưng các đối động cơ, bánh xe vẫn có thể tồn tại độc lập

Aggregation
  • Composition

    • Class A có chứa object của class B

    • Object X của class A bị hủy thì Object Y của class B sẽ bị hủy theo

    • Ví dụ: Cơ thể người bao gồm nhiều cơ quan như: não, tim, chân, ... Khi cơ thể người chết đi thì các cơ quan đó cũng bị chết theo.

Composition
  • Dependency: là quan hệ phụ thuộc giữa 2 class .

    • Các loại dependency:

Dependency

Tiêu chí đánh giá: + Động từ + Sự phụ thuộc giữa các đối tượng

Đề nghị:

1.3 Các bước xây dựng OOP

  1. Xác định các lớp đối tượng, quan hệ và thuộc tính và phương thức (trách nhiệm) trực tiếp từ yêu cầu của hệ thống

  2. Nếu một lớp đối tượng có thuộc tính có cấu trúc phức tạp hoặc có các thuộc tính có liên hệ chặt chẽ với nhau và có ngữ nghĩa cụ thể thì nên tách ra thành lớp đối tượng phụ

  3. Nhiều lớp đối tượng có nhiều đặc điểm chung -- >Xây dựng lớp đối tượng tổng quát chung cho các lớp đối tượng cụ thể này

  4. Một lớp đối tượng có thuộc tính phân loại và cách xử lý trong các phương thức của đối tượng thuộc lớp này phụ thuộc vào giá trị của thuộc tính phân loại --> Tách lớp đối tượng này thành nhiều lớp đối tượng con tương ứng với mỗi (nhóm) giá trị của thuộc tính phân loại

  5. Hiệu chỉnh các quan hệ đã có để phù hợp với các lớp đối tượng vừa được điều chỉnh

  6. Kiểm tra sơ đồ và hiệu chỉnh theo kinh nghiệm

Tham khảo: https://drive.google.com/drive/folders/1oElgWrDU450ux1bGhVQRoBVayX_WmtMo

2. Phân loại design patterns.

Theo như những gì được trình bày trong cuốn sách thì hệ thống Design Pattern có 26 mẫu, được phân chia thành 3 nhóm chính.

2.1 Creational Pattern (nhóm khởi tạo)

Creational Pattern

Nhóm này gồm 6 mẫu thông dụng:

  • Abstract Factory Creates an instance of several families of classes

  • Builder Separates object construction from its representation

  • Factory Method Creates an instance of several derived classes

  • Object Pool Avoid expensive acquisition and release of resources by recycling objects that are no longer in use

  • Prototype A fully initialized instance to be copied or cloned

  • Singleton A class of which only a single instance can exist

2.2 Structural pattern (nhóm cấu trúc)

Structural pattern

Nhóm này gồm 8 mẫu thông dụng:

  • Adapter Match interfaces of different classes

  • Bridge Separates an object’s interface from its implementation

  • Composite A tree structure of simple and composite objects

  • Decorator Add responsibilities to objects dynamically

  • Facade A single class that represents an entire subsystem

  • Flyweight A fine-grained instance used for efficient sharing

  • Private Class Data Restricts accessor/mutator access

  • Proxy An object representing another object

2.3 Behavioral Pattern (nhóm hành vi)

Behavioral pattern

Nhóm này gồm 12 mẫu thông dụng:

  • Chain of responsibility A way of passing a request between a chain of objects

  • Command Encapsulate a command request as an object

  • Interpreter A way to include language elements in a program

  • Iterator Sequentially access the elements of a collection

  • Mediator Defines simplified communication between classes

  • Memento Capture and restore an object's internal state

  • Null Object Designed to act as a default value of an object

  • Observer A way of notifying change to a number of classes

  • State Alter an object's behavior when its state changes

  • Strategy Encapsulates an algorithm inside a class

  • Template method Defer the exact steps of an algorithm to a subclass

  • Visitor Defines a new operation to a class without change

Link full image: https://refactoring.guru/design-patterns/catalog

Last updated

Was this helpful?