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, có 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ụ
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.

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

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

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.

Dependency: là quan hệ phụ thuộc giữa 2 class .
Các loại dependency:
Tiêu chí đánh giá: + Động từ + Sự phụ thuộc giữa các đối tượng
Đề nghị:
Quan hệ về mặt tổ chức
Quan hệ về không gian
Quan hệ theo vai trò (chủ động/ bị động)
1.3 Các bước xây dựng OOP
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
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ụ
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
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
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
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)

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)

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)

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?