Tôi đang làm việc trên một hệ thống nhúng có giao diện với người dùng với một số nút và màn hình đồ họa nhỏ.
Như một lưu ý phụ: Vì tôi đang ở trên một hệ thống nhúng, tôi muốn ngăn việc cấp phát bộ nhớ động càng nhiều càng tốt. Một cái gì đó như std :: vector thậm chí không có sẵn.
Tôi cần triển khai menu cấu hình bằng cấu trúc menu lồng nhau cổ điển như thế này:
Level A Node 1
-> Level B Node 1
-> Level C Node 1
-> Level B Node 2
-> Level B Node 3
Level A Node 2
Level A Node 3
Tôi rất không chắc chắn về cách tiếp cận tốt nhất ở đây. Tôi đọc về một số cách để tiếp cận một cái gì đó như thế này như sử dụng Mô hình tổng hợp. Tuy nhiên, tôi luôn va vào thứ gì đó trông có vẻ "trên giấy" nhưng dường như là một mớ hỗn độn để thực hiện.
Suy nghĩ chung của tôi là có một cái gì đó một MenuNode
lớp biết về các nút phụ và nút cha của nó khi khởi tạo. Một Menu
lớp có thể xử lý điều hướng nút và xử lý. Rõ ràng, mọi MenuNode
phải thực hiện / thực hiện hành vi cụ thể như:
- Báo cáo
Menu
những gì nó muốn hiển thị (bố cục / định vị thực tế không phải là mối quan tâm củaMenuNode
) - Phản ứng với đầu vào của người dùng (như nhấn nút để tăng / giảm / chuyển đổi giá trị)
- Truy cập giá trị thực tế của lãi suất (chúng nằm trong một
ApplicationSettings
lớp)
Điều gì sẽ là cách tốt nhất để thực hiện điều này?
Sử dụng một
MenuNode
lớp cơ sở (trừu tượng) và tạo một lớp con cho MỌI mục nút menu. Trong quá trình khởi tạo tôi có thể cung cấp một con trỏ tớiApplicationSettings
hoặc các phụ thuộc khác mà nó có thể cần. Bằng cách nào đó, cảm thấy sai lầm khi tạo ra 10 lớp dẫn xuất trong đó mỗi lớp sẽ được kích hoạt chỉ một lần.Sử dụng cùng một
MenuNode
lớp cho mọi nút và thực hiện chức năng thông qua các cuộc gọi lại đến các chức năng miễn phí. Từ những gì tôi đọc khá phổ biến đến "ghép" các hàm miễn phí với các đối tượng. Tuy nhiên, nó cảm thấy như nó sẽ làm phức tạp mọi thứ. Đối với mỗi thành viên có thể có, như ReportButtonPress () hoặc một cái gì đó, tôi sẽ phải cung cấp cuộc gọi lại để thực hiện thực tế trong quá trình khởi tạo.Tôi chắc chắn có một cái gì đó tôi đang nhìn ở đây.