Dat Hoang's Blog

Design principles & Design patterns

Design principles

Single responsibility

Mỗi class chỉ nên mang nhiệm vụ của một thứ.

Open / Closed

Class nên mở với việc kế thừa và đóng với việc chỉnh sửa.

Liskov substitution

Khi kế thừa một class, lưu ý để class con có thể truyền vào vị trí yêu cầu class cha mà không làm thay đổi logic code.

Interface segregation

Không nên bắt class con tạo thể hiện của phương thức interface mà nó không dùng.

Dependency inversion

Class bậc cao không nên phụ thuộc vào class bậc thấp, cả hai nên phụ thuộc vào sự trừu tượng.

Design patterns

Creational patterns

Cách nhớ: Abraham Became First President of State.

Abstract factory

Cho phép tạo ra các nhóm của các object liên quan mà không phải xác định cụ thể class nào.

Builder

Cho phép tạo ra các object phức tạp theo từng bước.

Factory method

Cung cấp interface cho việc tạo ra các object từ class cha, nhưng để các class con quyết định loại object nào sẽ được tạo ra.

Prototype

Cho phép tạo ra các object giống hệt một object có sẵn.

Singleton

Đảm bảo chỉ có một object của một class nào đó trong chương trình.

Structural patterns

Cách nhớ: ABCDFFP

Adapter

Cho phép các object với interface không tương thích tương tác với nhau.

Bridge

Cho phép tách một nhóm các class liên quan thành hai phân hệ là trừu tượng và thể hiện.

Composite

Giúp tạo ra cấu trúc phân cấp của các object.

Decorator

Cho phép thêm hành động vào object bằng cách gói nó trong một object khác.

Facade

Tạo ra một interface đơn giản để sử dụng các class phức tạp bên dưới.

Flyweight

Cho phép tái sử dụng tại các object có một phần dữ liệu không đổi.

Proxy

Cho phép thực hiện một số hành động trước hoặc sau khi gọi phương thức của một object.

Behavioral patterns

Cách nhớ: 2 MICS On TV

Mediator

Cho phép các object giao tiếp với nhau qua một object trung gian.

Memento

Cho phép lưu và khôi phục object.

Iterator

Cho phép duyệt một nhóm các object theo thứ tự.

Intepretor

Cho phép định nghĩa cách thể hiện ngữ pháp của một ngôn ngữ, và tạo ra object có khả năng xử lý được cách thể hiện đó.

Chain of responsibility

Cho phép truyền một yêu cầu qua danh sách các object xử lý.

Command

Cho phép thực thi một yêu cầu mà không cần quan tâm tới object nào sẽ xử lý yêu cầu đó.

State

Cho phép một object thay đổi hành động khi trạng thái của nó thay đổi, giống như nó đã được thay đổi class.

Strategy

Cho phép định nghĩa một nhóm các thuật toán của một bài toán, và cho các object của chúng thay đổi được cho nhau.

Observer

Cho phép một nhóm object theo dõi sự thay đổi của một object và hành động khi có thay đổi.

Template method

Cho phép định nghĩa các bước của một thuật toán trong class cha và để class con thay đổi hành động của một số bước đó.

Visitor

Cho phép tách rời thuật toán khỏi object nơi chúng được thực thi.