cuốn sách gpt4 ai đã làm

Loại bỏ `instanceof`

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-03 03:30:38 28 4
mua khóa gpt4 Nike

Trong trò chơi dựa trên sprite mà tôi đang viết, mỗi trường trong lưới 2D chứa một loạt các sprite. Hầu hết thời gian, điều quan trọng nhất là quan trọng nhất.

Trong mô-đun quy tắc của trò chơi, tôi có rất nhiều mã như thế này:

boolean công khai isGameWon(Bảng bảng) {
cho (Điểm điểm : board.getTargetPoints())
if(!(board.getTopSpriteAt(point) instanceof Box))
trả về sai;
trả về đúng sự thật;
}

gia hạn: // Làm điều gì đó nếu trong mọi Mục tiêu có một Hộp Nó có giá trị. Tôi không thấy cách thực hiện việc này bằng cách thêm doS Something() Thêm vào Sprite để thực hiện việc này trừ khi doS Something() Trả về 1 nếu sprite là một hộp, nếu không thì trả về 0. (Điều này giống như instanceof).


Tôi biết instanceof được coi là có hại vì nó giết chết ý tưởng lập trình hướng đối tượng.

Nhưng tôi không chắc chắn cách sửa mã của mình. Dưới đây là một số suy nghĩ của tôi:

  • Tôi không nghĩ nó sẽ làABox() Phương pháp này chỉ đơn giản được thêm vào Ma Một giao diện sẽ tốt hơn.
  • nếu như Hộp Đây có phải là một giao diện để các lớp khác có thể nhận được các đặc quyền tương tự, điều đó có giúp ích gì không?
  • Tôi có nên thử làm điều gì đó lạ mắt như khớp mẫu/gửi kép với các mẫu mà khách truy cập của tôi thích không?
  • Mô-đun quy tắc có thể hoạt động chặt chẽ với các loại không, chỉ vì dù sao nó cũng phải biết ngữ nghĩa của chúng?
  • Toàn bộ ý tưởng về mẫu Chiến lược mô-đun quy tắc có phải là thiếu sót không?
  • Không có ích gì khi xây dựng các quy tắc thành Sprites vì ​​tất cả chúng đều phải thay đổi khi thêm loại mới.

Tôi hy vọng bạn đã thử điều gì đó tương tự và có thể chỉ cho tôi đi đúng hướng.

câu trả lời hay nhất

sử dụngtính đa hình :

lớp Sprite {
..
một sốMethod(){
//làm ma
}
..
}

lớp Box mở rộng Sprite {
..
@Ghi đè
một sốMethod(){
//làm hộp
}
..
}

Vì vậy, bạn chỉ cần gọi sprite.someMethod() trong ví dụ của mình.

Về java - việc loại bỏ `instanceof`, chúng tôi tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/8711636/

28 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress