Tôi có một vấn đề về khái niệm với việc triển khai mã đúng, có vẻ như cần nhiều kế thừa, đó sẽ không phải là vấn đề trong nhiều ngôn ngữ OO, nhưng vì dự án dành cho Android, không có thứ gì giống như nhiều extends
.
Tôi có một loạt các hoạt động, xuất phát từ các lớp cơ sở khác nhau, chẳng hạn như đơn giản Activity
, TabActivity
, ListActivity
, ExpandableListActivity
, vv Ngoài ra tôi có một số đoạn mã mà tôi cần phải ra vào onStart
, onStop
, onSaveInstanceState
, onRestoreInstanceState
và xử lý sự kiện tiêu chuẩn khác trong tất cả các hoạt động này.
Nếu tôi có một lớp cơ sở duy nhất cho tất cả các hoạt động, tôi sẽ đặt mã vào một lớp dẫn xuất trung gian đặc biệt, sau đó tạo tất cả các hoạt động mở rộng nó. Thật không may, đây không phải là trường hợp, bởi vì có nhiều lớp cơ sở. Nhưng việc đặt cùng một phần mã vào một số lớp trung gian không phải là một cách để đi, imho.
Một cách tiếp cận khác có thể là tạo ra một đối tượng trợ giúp và ủy thác tất cả các cuộc gọi của các sự kiện nêu trên cho người trợ giúp. Nhưng điều này đòi hỏi phải bao gồm đối tượng trợ giúp và tất cả các trình xử lý được xác định lại trong tất cả các lớp trung gian. Vì vậy, không có nhiều khác biệt so với cách tiếp cận đầu tiên ở đây - vẫn còn rất nhiều mã trùng lặp.
Nếu một tình huống tương tự xảy ra trong Windows, tôi sẽ là lớp cơ sở của lớp con (thứ gì đó "tương ứng" với Activity
lớp trong Android) và bẫy các tin nhắn thích hợp ở đó (ở một nơi duy nhất).
Có thể làm gì trong Java / Android cho việc này? Tôi biết có các công cụ thú vị như thiết bị Java ( với một số ví dụ thực tế ), nhưng tôi không phải là một chuyên gia về Java và không chắc nó có đáng để thử trong trường hợp cụ thể này không.
Nếu tôi bỏ lỡ một số giải pháp tốt khác, xin vui lòng, đề cập đến chúng.
CẬP NHẬT:
Đối với những người có thể quan tâm đến việc giải quyết vấn đề tương tự trong Android, tôi đã tìm thấy một cách giải quyết đơn giản. Có tồn tại lớp Ứng dụng , cung cấp, trong số những thứ khác, giao diện ActivityLifecycleCallbacks . Nó thực hiện chính xác những gì tôi cần cho phép chúng tôi chặn và thêm một số giá trị vào các sự kiện quan trọng cho tất cả các hoạt động. Hạn chế duy nhất của phương pháp này là nó có sẵn bắt đầu từ API cấp 14, điều này không đủ trong nhiều trường hợp (hỗ trợ cho API cấp 10 là một yêu cầu điển hình hiện nay).
decordator pattern
. Đây là giải pháp cuối cùng, mặc dù thực sự chứng minh điều tôi muốn tránh - sao chép mã. Tôi sẽ chấp nhận câu trả lời của bạn, nếu không có ứng dụng ý tưởng nào khác. Tôi có thể sử dụng thuốc generic để khái quát mã của "trung gian" không?