Saya memiliki masalah konseptual dengan implementasi kode yang tampaknya membutuhkan banyak pewarisan, yang tidak akan menjadi masalah dalam banyak bahasa OO, tetapi karena proyek ini untuk Android, tidak ada yang namanya multiple extends
.
Saya memiliki banyak kegiatan, yang berasal dari kelas dasar yang berbeda, seperti sederhana Activity
, TabActivity
, ListActivity
, ExpandableListActivity
, dll Juga saya memiliki beberapa fragmen kode yang saya perlu tempat ke onStart
, onStop
, onSaveInstanceState
, onRestoreInstanceState
dan event handler standar lainnya dalam semua kegiatan.
Jika saya memiliki kelas basis tunggal untuk semua kegiatan, saya akan menempatkan kode ke kelas turunan menengah khusus, dan kemudian membuat semua kegiatan memperluasnya. Sayangnya, ini bukan masalahnya, karena ada beberapa kelas dasar. Tetapi menempatkan bagian kode yang sama ke beberapa kelas menengah bukanlah cara yang bagus, imho.
Pendekatan lain bisa dengan membuat objek helper dan mendelegasikan semua panggilan peristiwa yang disebutkan di atas kepada helper. Tetapi ini membutuhkan objek helper untuk dimasukkan, dan semua penangan harus didefinisikan ulang di semua kelas menengah. Jadi tidak ada banyak perbedaan dengan pendekatan pertama di sini - masih banyak duplikat kode.
Jika situasi serupa terjadi di bawah Windows, saya akan subkelas kelas dasar (sesuatu yang "sesuai" dengan Activity
kelas di Android) dan menjebak pesan yang sesuai di sana (di satu tempat).
Apa yang bisa dilakukan di Java / Android untuk ini? Saya tahu ada alat yang menarik seperti instrumentasi Java ( dengan beberapa contoh nyata ), tapi saya bukan guru Java, dan tidak yakin apakah perlu dicoba dalam kasus khusus ini.
Jika saya melewatkan beberapa solusi layak lainnya, tolong sebutkan.
MEMPERBARUI:
Bagi mereka yang mungkin tertarik untuk menyelesaikan masalah yang sama di Android, saya telah menemukan solusi sederhana. Ada kelas Aplikasi , yang menyediakan, antara lain, antarmuka ActivityLifecycleCallbacks . Itu melakukan persis apa yang saya butuhkan memungkinkan kita untuk mencegat dan menambahkan beberapa nilai ke dalam peristiwa penting untuk semua kegiatan. Satu-satunya kelemahan dari metode ini adalah bahwa itu tersedia mulai dari API level 14, yang tidak cukup dalam banyak kasus (dukungan untuk API level 10 adalah persyaratan umum hari ini).
decordator pattern
. Ini adalah pilihan terakhir, yang meskipun sebenarnya menunjukkan apa yang saya inginkan untuk dihindari - duplikasi kode. Saya akan menerima jawaban Anda, jika tidak ada ide instersting lain yang muncul. Bisakah saya menggunakan obat generik untuk menggeneralisasi kode "perantara"?