ฉันมีปัญหาด้านแนวคิดเกี่ยวกับการติดตั้งโค้ดอย่างเหมาะสมซึ่งดูเหมือนว่าต้องใช้การสืบทอดหลายแบบซึ่งจะไม่เป็นปัญหาในหลายภาษา OO แต่เนื่องจากโปรเจ็กต์สำหรับ Android ไม่มีสิ่งเช่นหลายextends
อย่าง
ฉันมีพวงของกิจกรรมที่ได้มาจากฐานเรียนที่แตกต่างกันเช่นที่เรียบง่ายActivity
, TabActivity
, ListActivity
, ExpandableListActivity
ฯลฯ นอกจากนี้ฉันมีเศษรหัสบางอย่างที่ฉันต้องไปยังสถานที่ลงในonStart
, onStop
,onSaveInstanceState
, onRestoreInstanceState
และอื่น ๆ ที่จัดการเหตุการณ์มาตรฐานในทุกกิจกรรม
ถ้าฉันมีคลาสฐานเดียวสำหรับทุกกิจกรรมฉันจะวางโค้ดลงในคลาสที่ได้รับมาจากระดับกลางพิเศษจากนั้นสร้างกิจกรรมทั้งหมดที่ขยายออกมา น่าเสียดายที่นี่ไม่ใช่กรณีเนื่องจากมีหลายคลาสพื้นฐาน แต่การวางส่วนของรหัสเดียวกันลงในคลาสกลางหลาย ๆ คลาสนั้นไม่ใช่วิธีที่จะทำได้
อีกวิธีหนึ่งคือการสร้างวัตถุผู้ช่วยและมอบหมายการโทรเหตุการณ์ทั้งหมดที่กล่าวไว้ข้างต้นให้กับผู้ช่วย แต่สิ่งนี้ต้องการวัตถุผู้ช่วยที่จะรวมและตัวจัดการทั้งหมดจะถูกกำหนดใหม่ในชั้นกลางทั้งหมด ดังนั้นจึงไม่มีความแตกต่างกับวิธีแรกที่นี่ - ยังคงมีการทำสำเนารหัสจำนวนมาก
หากมีสถานการณ์คล้ายกันเกิดขึ้นใน Windows ฉันต้องการคลาสย่อยฐานรอง (สิ่งที่ "สอดคล้อง" กับ Activity
คลาสใน Android) และดักจับข้อความที่เหมาะสมที่นั่น (ในที่เดียว)
Java / Android สามารถทำอะไรได้บ้าง? ฉันรู้ว่ามีเครื่องมือที่น่าสนใจเช่นเครื่องมือJava ( พร้อมตัวอย่างจริง ) แต่ฉันไม่ใช่กูรู Java และไม่แน่ใจว่ามันคุ้มค่าที่จะลองในกรณีเฉพาะนี้หรือไม่
หากฉันพลาดวิธีแก้ปัญหาที่เหมาะสมอื่น ๆ โปรดพูดถึงพวกเขา
UPDATE:
สำหรับผู้ที่อาจมีความสนใจในการแก้ปัญหาเดียวกันใน Android ฉันพบวิธีแก้ปัญหาง่ายๆ มีอยู่แอพลิเคชันระดับซึ่งมีในสิ่งอื่น ๆ อินเตอร์เฟซActivityLifecycleCallbacks มันเป็นสิ่งที่ฉันต้องการทำให้เราสามารถดักและเพิ่มคุณค่าบางอย่างในเหตุการณ์สำคัญสำหรับทุกกิจกรรม ข้อเสียเปรียบเพียงอย่างเดียวของวิธีนี้คือมีให้ตั้งแต่เริ่มระดับ API 14 ซึ่งไม่เพียงพอในหลายกรณี (การรองรับ API ระดับ 10 เป็นข้อกำหนดทั่วไปในปัจจุบัน)
decordator pattern
ฉันรู้ว่า นี่เป็นทางเลือกสุดท้ายซึ่งจริง ๆ แล้วแสดงให้เห็นถึงสิ่งที่ฉันต้องการหลีกเลี่ยง - การทำสำเนารหัส ฉันจะยอมรับคำตอบของคุณหากไม่มีความคิดที่น่าประหลาดใจ ฉันสามารถใช้ยาสามัญเพื่อสรุปรหัสของ "คนกลาง" ได้หรือไม่?