2012-12-08 24 views
7

Có các tình huống trong Lập trình mạng mà bạn cần các Máy nhà nước có độ sâu nhiều và phân cấp.Thiết kế cho máy nhà nước đa cấp và phân cấp

State Machine 1 
    State Machine 2 

    State Machine 3 
      State Machine 4 

Dưới đây Nhà nước Máy 1 chứa hai máy nhà nước 23. 3 cũng có một máy 4.

Dựa trên trạng thái của máy bên ngoài, thông báo phải đi qua các máy trạng thái bên trong. Ngoài ra nếu có một số lỗi trong các máy trạng thái bên trong, phản hồi nên được đưa ra cho các máy trên.

Có cách tiếp cận tốt để thực hiện việc này không?

Ngay bây giờ tôi có một khu rừng nếu các câu lệnh và cờ làm điều này cho tôi. Tôi tiếp tục đối mặt với các vấn đề mà một số cờ không được thiết lập do đó toàn bộ trạng thái của máy trạng thái đi trong trạng thái không thể phục hồi.

CẬP NHẬT: Tôi đang cố gắng giữ trạng thái và máy tĩnh. Khi yêu cầu sẽ đi qua các máy và trạng thái, yêu cầu chính nó sẽ lưu trữ tất cả các dữ liệu meta cần thiết. Trong trường hợp này, mẫu máy trạng thái bình thường không có tác dụng.

Trả lời

0

State Pattern để tách trạng thái và Bối cảnh. Bối cảnh có thể lưu trữ cấu trúc phân cấp của các trạng thái và các lớp con trạng thái không biết về cấu trúc phân cấp này. Tất cả các câu lệnh if đều biến mất vì mỗi phần bên dưới nếu đi vào một phân lớp trạng thái riêng biệt.

+0

Tôi đã cố gắng sử dụng Nhà nước nhưng dường như không hoạt động cho thiết kế như vậy. Trên thực tế, luồng chương trình của tôi cũng chuyển đổi qua lại giữa các máy. Giống như trên một sự kiện tôi ở trong máy bên trong nhưng đối với sự kiện tiếp theo tôi cần phải ở bên ngoài máy. Và đó là những gì tạo ra vấn đề lớn. –

+0

Bạn nên đọc cuốn sách GOF về các mẫu thiết kế. Việc thực hiện các chuyển đổi trạng thái mà bạn nói đến được giải quyết trong phần Thực hiện. Tôi sẽ tóm tắt nó cho bạn: Chuyển tiếp trạng thái có thể được thực hiện hoàn toàn trong bối cảnh hoặc trong các lớp con của tiểu bang. Bạn nên chọn nơi để thực hiện bằng cách đặt các câu hỏi như: Có phải số trạng thái cố định hoặc sẽ được thêm vào không? – user1168577

6

Có thể mã nguồn Android có thể hữu ích để hiểu cách thực hiện việc này? Kiểm tra WiFi state machine here ..

+0

Cảm ơn nó đã giúp tôi hiểu rõ. –

+0

Bạn được chào đón. Tôi gặp vấn đề tương tự gần đây vì vậy tôi đã đọc gần đây. Hy vọng rằng những người khác sẽ tìm thấy nó hữu ích là tốt;) – Ewoks

Các vấn đề liên quan