Tải bản đầy đủ (.pptx) (16 trang)

ĐỀ tài STATE PATTERN

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (499.07 KB, 16 trang )

TRƯỜNG ĐH SƯ PHẠM KỸ THUẬT TP.HCM
KHOA CÔNG NGHỆ THÔNG TIN
BỘ MÔN CÔNG NGHỆ PHẦN MỀM

MÔN HỌC:
THIẾT KẾ PHẦN MỀM HƯỚNG ĐỐI TƯỢNG

ĐỀ TÀI:
STATE PATTERN

Giảng viên: ThS. Nguyễn Trần Thi Văn
Nhóm 11

1


DANH SÁCH NHÓM 11

1.

Phùng Văn An

2


NỘI DUNG

Đặt vấn đề và giải pháp

1


Tổng quan về State Pattern

2

Các trường hợp sử dụng

3

Cấu trúc mẫu

4

5

6

7

Ưu – Nhược điểm

Các mẫu liên quan

Demo
3


1.

ĐẶT VẤN ĐỀ VÀ GIẢI PHÁP


 Đặt vấn đề



Viết một game, có một lớp Soldier.
Lớp Soldier xử lý input từ bàn phím.



Nhấn Space thì nhảy

class Soldier {
void HandleInput(Input input) {
if (input == PRESS_SPACE) {
setGraphics(IMAGE_JUMP);
}
}
}



Khi ta nhấn nhiều lần Space -> Lỗi…
4


1.

ĐẶT VẤN ĐỀ VÀ GIẢI PHÁP

 Đặt vấn đề



Fix lỗi:
- Thêm cờ isJumping
class Soldier {
void HandleInput(Input input) {
if (input == PRESS_SPACE) {
if (!isJumping) {
isJumping = true;
setGraphics(IMAGE_JUMP);
}
}
}
}

5


1.

ĐẶT VẤN ĐỀ VÀ GIẢI PHÁP

 Đặt vấn đề


Nhấn Ctrl thì ngồi.

class Soldier {

else if (input == PRESS_CTRL) {

if (!isJumping) {

void HandleInput(Input input) {

isJumping = false;

if (input == PRESS_SPACE) {

setGraphics(IMAGE_DOWN);

if (!isJumping) {
}

isJumping = true;
}

setGraphics(IMAGE_JUMP);

else if (input == RELEASE_CTRL) {

}

setGraphics(IMAGE_STAND);

}
}
}
}

6



1.

ĐẶT VẤN ĐỀ VÀ GIẢI PHÁP

 Đặt vấn đề



Lỗi tương tự
Sửa bằng cách thêm cờ isStanding, hoặc isDown.



Mỗi khi thêm một trạng thái cho lớp Soldier thì ta phải thêm cờ và đồng
thời phải điều chỉnh lại code cũ.



Code ngày càng phức tạp và khó hiểu.

7


1.

ĐẶT VẤN ĐỀ VÀ GIẢI PHÁP

 Giải pháp




Liệt kê các trạng thái của Soldier.
Liệt kê các cách chuyển trạng thái.

=> Finite State Machine

Bình đẳng

8


2.TỔNG QUAN VỀ STATE PATTERN





State pattern thuộc nhóm Behavioral Patterns
Cho phép Thay đổi hành vi của một đối tượng khi có sự thay đổi trạng thái bên trong.
Sử dụng tính Đa Hình để định nghĩa những hành vi khác nhau cho những trạng thái khác
nhau của một đối tượng.



Biến cố là các sự kiện xảy ra làm cho đối tượng chuyển trạng thái(tự xảy ra hoặc bị bên
ngoài tác động).

9



4. CÁC TRƯỜNG HỢP SỬ DỤNG

Mẫu thiết kế State được áp dụng cho đối tượng có các trạng thái khác nhau. Những đối tượng sẽ thay đổi
trạng thái khác nhau khi phản ứng lại những ảnh hưởng khác nhau từ bên ngoài. Khi đó, ta thấy những đối
tượng có trạng thái sẽ có những đặc tính sau:



Có một tập trạng thái xác định. Ví dụ, nhân vật trong game có các trạng thái đứng yên, di chuyển,
nhảy lên, tấn công…




Đối tượng chỉ có một trạng thái duy nhất tại 1 thời điểm.
Có một số hành động được gửi đến đối tượng. Ví dụ như các phím bấm người chơi bấm để điều
khiển nhân vật.



Có thể chuyển đối trạng thái của đối tượng.

10


4. CẤU TRÚC MẪU




State: Một lớp abstract hoặc một interface tạo một giao tiếp chung cho các lớp
ConcreteState.




Context: Lớp mà client (các developer khác) sẽ sử dụng.
ConcreteState: Lớp thể hiện một trạng thái cụ thể.

11


5. ƯU – NHƯỢC ĐIỂM

 Ưu điểm


Mỗi trạng thái của đối tượng sẽ được lưu trữ trong một lớp state riêng biệt. Thêm một State mới, ta chỉ cần
thêm mới một lớp đối tượng mới. Các state hoạt động độc lập với nhau, nên dễ dàng bảo trì riêng lẻ.



Thay vì sử dụng những đoạn code if/else, ta áp dụng mẫu state. Nên việc thay đổi trạng thái của đối tượng
dễ dàng hơn. Code đọc dễ hiểu hơn.



Mỗi state bao gồm những thuộc tính và hành vi của đối tượng. Các state khác nhau sẽ có từng hành động
khác nhau. Nên đối tượng sẽ phản ứng lại những tác động từ bên ngoài theo những cách khác nhau, tùy

thuộc vào trạng thái hiện tại

12


5. ƯU – NHƯỢC ĐIỂM

 Nhược điểm



Mỗi lớp state mang đậm tính riêng biệt mà mỗi state thuộc về. Ví dụ: Trạng thái tấn công của
hero bắn cung sẽ mang đậm tính chất của một hero đánh xa. Không thể tái sử dụng trạng thái
tấn công của hero bắn cung áp dụng cho một hero đánh kiếm được. Khả năng tái sử dụng của
State rất ít.



Chương trình có thể chạy chậm hơn một chút so với việc không sử dụng mẫu State, tuy
nhiên, điều này là không đáng kể.

13


6. CÁC MẪU LIÊN QUAN



Mẫu Flyweight: giải thích khi nào các đối tượng State có thể được phân tách và được phân
tách như thế nào.




Các đối tượng State thường là các Singleton.

14


7. DEMO

class Class Model

Soldier

AbstractState

- state: AbstractState

+ HandleInput(Soldier, Input): AbstractState

+ Handle(Input)

StandState

JumpState

DownState

+ HandleInput(Soldier, Input): AbstractState


+ HandleInput(Soldier, Input): AbstractState

+ HandleInput(Soldier, Input): AbstractState

15


THE END
THANK YOU FOR WATCHING !

16



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×