2010-01-27 36 views
5

Tôi đang thiết kế trò chơi pinball cho dự án Uni trong đó có nghĩa vụ phải có 2 chế độ: chế độ chạy và chế độ trình tạo, nhờ đó người ta có thể thiết kế/thiết kế lại bố cục của máy.Để sử dụng hay không sử dụng Mẫu Nhà nước?

Suy nghĩ ban đầu của tôi là mẫu trạng thái - tuy nhiên, tôi lo ngại rằng giao diện chung giữa các tiểu bang có thể kết hợp chúng thành các phương pháp triển khai không phù hợp với trạng thái đó.

Ví dụ: Trong chế độ xây dựng nó sẽ hoàn toàn thích hợp để thiết lập vị trí của một bội thu hoặc bất cứ điều gì; nhưng trong chế độ chạy nó sẽ được thực hiện như không làm gì hoặc ném một ngoại lệ - mà chỉ có vẻ khó chịu, đặc biệt là nếu có nhiều phương pháp như vậy.

Thiết kế này có thiết kế tốt hơn không?

+2

Bạn có cần sử dụng mẫu không? Hai tiểu bang không biện minh cho điều này. – ChaosPandion

+0

không có gì, nhưng rất tách rời được đánh dấu nhiều hơn – Robert

+0

Tôi đã suy nghĩ của 3 tiểu bang, vì nó có thể là tốt đẹp, không chuyển sang chế độ xây dựng trong khi một trò chơi đang chạy ... – Robert

Trả lời

11

Trực giác của bạn là chính xác. Mẫu trạng thái là hữu ích khi một chương trình có thể có nhiều trạng thái khác nhau, mỗi trạng thái hỗ trợ nhiều hoạt động giống nhau. Ví dụ một chương trình vẽ có thể có nhiều công cụ khác nhau, nhưng mỗi chương trình đều hỗ trợ các hoạt động tương tự như đặt bút xuống hoặc lên và vẽ một đường thẳng giữa 2 điểm.

Trong trường hợp của bạn, chỉ có 2 trạng thái và chúng không chia sẻ nhiều hành vi. Điều chính họ chia sẻ là các hoạt động GUI phổ biến mà có lẽ đã có trong một thư viện chuẩn. Bạn cần phải đảm bảo rằng mã cho những thứ như hiển thị các cản không được nhân đôi, nhưng bạn có thể làm điều đó mà không có mẫu nhà nước.

1

Một vài năm trước, tôi đã có một bài tập tương tự tại trường đại học.

Tôi muốn nói rằng việc sử dụng mẫu trạng thái là quá mức cần thiết cho điều này, cũng như không hoàn toàn phù hợp, như đã đề cập trước đây. Những gì chúng tôi đã thực hiện với nhiệm vụ này là:

  • Sử dụng một chế độ khác, cho phép chuyển đổi giữa các chế độ này.
  • Mỗi chế độ không có kiến ​​thức về chế độ khác, chúng không thực hiện cuộc gọi với nhau.
  • Họ chia sẻ kiến ​​thức về mô hình (trong trường hợp của bạn là bảng pinball, với vị trí cản, quả bóng, v.v.), vì vậy khi bạn chuyển đổi giữa chúng, chúng nhất quán.
  • Về mặt GUI, mỗi chế độ cơ bản được cấp không gian để làm điều đó. Như bạn nói, mỗi chế độ có các hành động khác nhau có thể, do đó buộc chúng phải chia sẻ cùng một hành động như một phần của mẫu trạng thái là "có mùi".

Về cơ bản, như được đề cập ở nơi khác, hai chế độ không chia sẻ đủ tính phổ biến để thực sự biện minh cho mẫu trạng thái tại đây.

Có một khả năng áp dụng mẫu trạng thái, điều này có ý nghĩa. Vì đó là một bài tập đại học, có khả năng là tín dụng cho ý nghĩ và lý giải đằng sau nó. Nó liên quan đến "cấp trên" tôi đã đề cập trước đó. Theo kinh nghiệm của tôi, đây là một phần của GUI độc lập với chế độ này. Nó cho phép những thứ như đóng ứng dụng, mở các cấu hình pinball trước đó và chuyển đổi giữa các chế độ. Những gì nó cũng có thể làm là hiển thị các mục menu phụ thuộc ngữ cảnh. Trạng thái của các menu có thể được lấy ra từ chế độ hiện tại. Vì vậy, chế độ trình xây dựng có thể bao gồm lưu và các hành động cụ thể của người xây dựng khác và chế độ chạy có thể cung cấp các tùy chọn phát/tạm dừng. Nếu bạn đã dành thời gian điều tra mẫu trạng thái và muốn trả tiền, đây sẽ là một lựa chọn có thể.

P.S.Murray có vẻ nhiệt tình về việc chúng tôi sử dụng các mẫu thiết kế vào thời điểm đó ;-)

+0

bạn có thể giải thích ý bạn là "cấp trên" không? – Robert

+0

Tôi đã suy nghĩ về một đối tượng có chứa một tham chiếu đến cả hai chế độ khác nhau, và cho phép khả năng chuyển đổi giữa chúng. Các chế độ không nên biết về cách chuyển đổi giữa chúng, đó là trách nhiệm của một cái gì đó "ở trên" chúng. Như một ví dụ cụ thể, nếu mỗi chế độ được chứa trong một JPanel, "cấp trên" sẽ là JFrame chứa tham chiếu đến cả hai, và có một điều khiển (giống như một mục trình đơn) để chuyển đổi giữa chúng. Điều đó có ý nghĩa hơn một chút không? – Grundlefleck

+0

BTW: "cấp cao hơn" không phải là thuật ngữ kỹ thuật thích hợp (như bạn có thể đoán), vì vậy nó không thực sự có thể Googleable. "Đối tượng soạn cả hai đối tượng chế độ của bạn" có lẽ gần hơn với các cụm từ chính xác. – Grundlefleck

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