Saya sedang mengerjakan sistem tertanam yang berinteraksi dengan pengguna dengan beberapa tombol dan tampilan grafik kecil.
Sebagai catatan: Karena saya menggunakan sistem tertanam, saya ingin mencegah alokasi memori dinamis sebanyak mungkin. Sesuatu seperti std :: vector bahkan tidak tersedia.
Saya perlu menerapkan menu konfigurasi menggunakan struktur menu bersarang klasik seperti ini:
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
Saya sangat tidak yakin tentang pendekatan terbaik di sini. Saya membaca tentang beberapa cara untuk mendekati sesuatu seperti ini seperti menggunakan Pola Komposit. Namun, saya selalu menabrak sesuatu yang tampak bagus "di atas kertas" tetapi tampaknya berantakan untuk diterapkan.
Pikiran umum saya adalah untuk memiliki sesuatu MenuNode
kelas yang tahu tentang sub-node dan simpul orangtua pada inisialisasi. Sebuah Menu
kelas bisa menangani navigasi simpul dan pengolahan. Jelas, setiap orang MenuNode
harus menjalankan / menerapkan perilaku tertentu seperti:
- Laporkan ke
Menu
apa yang ingin ditampilkan (tata letak / penentuan posisi yang sebenarnya tidak menjadi perhatianMenuNode
) - Bereaksi terhadap input pengguna (seperti tombol, tekan untuk menambah / mengurangi / mengganti nilai)
- Akses nilai aktual bunga (mereka berada di
ApplicationSettings
kelas)
Apa cara terbaik untuk mengimplementasikan ini?
Gunakan
MenuNode
kelas dasar (abstrak) dan buat sub-kelas untuk setiap item-simpul menu. Selama inisialisasi saya bisa memberikan pointer keApplicationSettings
atau dependensi lain yang mungkin diperlukan. Entah bagaimana rasanya membuat seperti 10 kelas turunan di mana masing-masing akan di-instal hanya sekali.Gunakan
MenuNode
kelas yang sama untuk setiap node dan mengimplementasikan fungsionalitas melalui callback untuk membebaskan fungsi. Dari apa yang saya baca cukup umum untuk "pasangan" fungsi bebas dengan objek. Namun, rasanya akan terlalu menyulitkan. Untuk setiap anggota mungkin ada, seperti ReportButtonPress () atau sesuatu, saya harus memberikan panggilan balik untuk implementasi aktual selama inisialisasi.Saya yakin ada sesuatu yang saya abaikan di sini.