2.1 Trạng thái
Trạng thái là một mẫu thiết kế hành vi. Nó được sử dụng trong những trường hợp khi trong quá trình thực thi chương trình, đối tượng phải thay đổi hành vi tùy thuộc vào trạng thái của nó.
Mô hình bao gồm 3 khối:
Bối cảnh là một lớp có các đối tượng sẽ thay đổi hành vi của chúng tùy thuộc vào trạng thái.
Trạng thái là giao diện mà mỗi trạng thái cụ thể phải thực hiện. Thông qua giao diện này, đối tượng Ngữ cảnh tương tác với trạng thái bằng cách ủy quyền các lệnh gọi phương thức tới nó. Giao diện nên chứa các phương tiện để phản hồi đối tượng có hành vi sẽ được thay đổi.
Đối với điều này, một sự kiện được sử dụng (Nhà xuất bản mẫu - Người đăng ký). Điều này là cần thiết để thay thế đối tượng trạng thái trong quá trình thực thi chương trình khi các sự kiện xảy ra. Có thể có trường hợp Context tự thăm dò định kỳ đối tượng trạng thái để chuyển đổi.
ConcreteState1, ConcreteState2 - các lớp trạng thái cụ thể. Nên chứa thông tin về những điều kiện và trạng thái mà đối tượng có thể chuyển từ trạng thái hiện tại. Ví dụ: từ ConcreteState1, một đối tượng có thể chuyển đến ConcreteState2 và ConcreteState3, và từ ConcreteState2 trở lại ConcreteState1, v.v. Đối tượng của một trong số chúng phải chứa Ngữ cảnh khi được tạo.
Ví dụ, bạn đang viết một trò chơi mà một nhân vật có thể chạy, bơi và bay. Nếu nhân vật của bạn xuống nước, thì việc hạn chế hành vi của anh ta trong nước là hợp lý: bây giờ anh ta không thể bắn, nhưng anh ta vẫn có một số hành động: bơi về phía trước, phải, trái, v.v.
Trạng thái của nhân vật của bạn có thể được mô tả bởi một đối tượng Trạng thái, đối tượng này có các phương thức có thể được gọi và sẽ thực hiện một số việc. Và sau khi nhân vật của bạn xuống nước, bạn chỉ cần thay đổi tham chiếu sang một đối tượng Trạng thái khác bên trong nó - và nó sẽ thay đổi trạng thái của nó.
2.2 chiến lược
Chiến lược là một mẫu thiết kế hành vi để xác định một nhóm thuật toán, đóng gói từng thuật toán và làm cho chúng có thể hoán đổi cho nhau. Điều này cho phép bạn chọn một thuật toán bằng cách xác định lớp thích hợp.
Mẫu Chiến lược cho phép bạn thay đổi thuật toán đã chọn bất kể các đối tượng máy khách sử dụng thuật toán đó.
Mẫu Chiến lược cho phép bạn sử dụng các quy tắc hoặc thuật toán kinh doanh khác nhau tùy thuộc vào ngữ cảnh. Nó được sử dụng trong trường hợp phải sử dụng các thuật toán khác nhau ở cùng một nơi tùy thuộc vào trạng thái hiện tại của hệ thống (hoặc môi trường của nó).
Điểm mạnh:
- đóng gói việc thực hiện các thuật toán khác nhau, hệ thống trở nên độc lập với những thay đổi có thể xảy ra trong quy tắc kinh doanh;
- gọi tất cả các thuật toán theo một cách tiêu chuẩn;
- không sử dụng công tắc và/hoặc câu lệnh điều kiện.
Mẫu này hơi giống với mẫu Trạng thái, nhưng ở đây điểm nhấn không phải là trạng thái mà là hành vi. Giả sử một nhân vật trong trò chơi của bạn có thể thay đổi vũ khí. Sau đó, khi thay đổi vũ khí, bạn chỉ cần thay đổi tham chiếu đến đối tượng mô tả cách thức hoạt động của vũ khí này.
2.3 Phương pháp mẫu
Lớp trừu tượng (abstract class) - định nghĩa các thao tác trừu tượng được thay thế trong các hàm thừa kế để thực hiện các bước của thuật toán; thực hiện một phương thức mẫu xác định khung của thuật toán. Phương thức mẫu gọi các hoạt động được thay thế và các hoạt động khác được định nghĩa trong lớp Trừu tượng.
Lớp cụ thể (lớp cụ thể) - thực hiện các hoạt động được thay thế theo cách cần thiết để thực hiện. Lớp Concrete giả định rằng các bước bất biến của thuật toán sẽ được thực hiện trong Lớp trừu tượng.
Mẫu này thường được sử dụng khi cần thiết:
- Sử dụng một lần phần bất biến của thuật toán, để lại phần thay đổi theo quyết định của những người thừa kế.
- Bản địa hóa và cách ly mã chung cho một số lớp để tránh trùng lặp.
- Chỉ cho phép người thừa kế mở rộng mã ở những nơi nhất định.
Vâng, mẫu này mô tả việc sử dụng một cặp: một lớp trừu tượng và cách thực hiện của nó.
2.4 Chuỗi trách nhiệm
Chuỗi trách nhiệm là một mẫu thiết kế hành vi được thiết kế để tổ chức các cấp độ trách nhiệm trong một hệ thống.
Mẫu được khuyến nghị sử dụng trong các điều kiện:
- trong hệ thống đã phát triển, có một nhóm đối tượng có thể xử lý các thông báo thuộc một loại nhất định;
- tất cả các tin nhắn phải được xử lý bởi ít nhất một đối tượng hệ thống;
- các tin nhắn trong hệ thống được xử lý theo sơ đồ “tự xử lý hoặc chuyển nó cho người khác”, tức là một số tin nhắn được xử lý ở cấp độ mà chúng được nhận, trong khi những tin nhắn khác được chuyển tiếp đến các đối tượng ở cấp độ khác.
2.5 Kỷ niệm
Keeper (Memento) là một mẫu thiết kế hành vi cho phép bạn sửa và lưu trạng thái bên trong của đối tượng mà không vi phạm tính đóng gói để có thể khôi phục về trạng thái này sau này.
Mẫu Guardian được sử dụng khi:
- cần lưu ảnh chụp nhanh trạng thái của đối tượng (hoặc một phần của đối tượng) để phục hồi sau này;
- Giao diện trực tiếp để nhận trạng thái của một đối tượng hiển thị chi tiết triển khai và phá vỡ sự đóng gói đối tượng.
GO TO FULL VERSION