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.