2012-06-09 34 views
5

Tôi biết về tham chiếu vòng tròn (lớp một lớp giữ b và lớp b giữ lớp a). Nhưng vì tôi chưa lập trình đủ, nên tôi khó có thể tìm ra lý do để sử dụng chúng. Tôi đã tự hỏi nếu mọi người có thể cho tôi một số ví dụ tốt đẹp và có thể giải thích lý do tốt để sử dụng chúng.Lý do tham chiếu vòng tròn với các lớp học?

Ví dụ: ngay bây giờ tôi đang xem hướng dẫn về mã nguồn 2D và người dùng đã tạo một lớp Creature và CreatureAi tham chiếu lẫn nhau. Lý do gì? Tôi chưa biết, đó là lý do tại sao tôi đang tìm kiếm các ví dụ và vẫn đang đọc xung quanh.

Trả lời

10

Trường hợp rõ ràng nhất của tham chiếu vòng tròn là tự tham khảo: bạn cần nó cho danh sách liên kết, cây và nhiều cấu trúc đệ quy khác.

Tham chiếu thông thường thường được ẩn trong một hệ thống phân cấp của các lớp được chia sẻ, chẳng hạn như các phần tử giao diện người dùng có tổ hợp tùy ý hoặc cây biểu thức.

Cuối cùng, trường hợp chung tham chiếu vòng tròn là mối quan hệ cha-con hai chiều: cha mẹ (ví dụ: bảng giao diện người dùng) giữ tham chiếu đến một mảng con của nó và mỗi trẻ (ví dụ: nút, bảng, v.v.) một tham chiếu đến phụ huynh. Phụ huynh cần phải gửi các đề xuất cho con cái của mình để nói với họ rằng nó đã được kích hoạt, vô hiệu hóa, có thể nhìn thấy, hoặc vô hình; một đứa trẻ có thể thông báo cho phụ huynh về sự cần thiết để thay đổi kích thước, thay đổi trạng thái hình ảnh vv

ví dụ cuối cùng này có lẽ là tương tự như cặp Creature-CreatureAI của bạn: họ là riêng biệt vì mối quan tâm của họ là khác nhau, nhưng họ có tài liệu tham khảo cho mỗi khác vì họ cần hợp tác trên các nhiệm vụ khác nhau.

11

Bạn có một Công ty thuộc lớp có chứa danh sách Cá nhân làm việc cho nó. Mỗi cá thể lớp Cá nhân trong bộ sưu tập chứa một tham chiếu đến Công ty mà họ làm việc.

Bằng cách này bạn có thể dễ dàng tìm ra những cá nhân nào làm việc cho công ty nào. Lưu ý rằng nó có thể không nhất thiết phải là thiết kế tốt nhất, đặc biệt nếu các lớp được duy trì trong cơ sở dữ liệu bằng cách sử dụng một cơ sở dữ liệu ORM hoặc một cơ sở dữ liệu tài liệu.

+0

Nó thực sự có thể là thiết kế * only * nếu bạn đang sử dụng OrmLite nói nơi bạn phải chỉ định quan hệ nước ngoài trong chính mã đó. Nhưng có, tôi không thích nó. – Voo

0

Thường thì nó không cần thiết, nhưng cung cấp mức độ tiện lợi cao cho mã hoạt động với các đối tượng.

Lần khác, nó thực sự là cần thiết. Ví dụ, một số quan hệ cần được biểu diễn trong mã như một cấu trúc dữ liệu, và quan hệ là phản xạ.

2

Có bất kỳ số lý do cho chu kỳ tự tham chiếu hoặc tài liệu tham khảo

  • Họ có thể cố hữu trong mô hình miền; ví dụ. mọi người có con cũng là con người, thư mục chứa những thứ khác bao gồm các thư mục khác. Tự tham khảo hoặc chu trình là một cách tự nhiên để thực hiện những điều này.

  • Chúng có thể là một cấu trúc dữ liệu chung hoặc ứng dụng cụ thể; ví dụ. một danh sách liên kết bao gồm các nút bao gồm các tham chiếu tới nút "tiếp theo" và "trước đó" trong danh sách, và điều này đòi hỏi lớp Node tự tham chiếu đến nó.

  • Lý do đằng sau tham chiếu cyclic có thể là một phần cơ bản của thiết kế ứng dụng.

  • Hoặc, nó có thể chỉ đơn giản là một tiện ích thực hiện, hoặc một vật phẩm lịch sử của các cấu trúc lại trước đó hoặc tiến hóa mã-cơ sở.

Về cơ bản, bạn cần tìm (toàn bộ) tại codebase ứng dụng để tìm ra lý do tại sao các phụ thuộc tuần hoàn này tồn tại ... và nếu chúng thực sự cần thiết.

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