พระเจ้าตา พา Delegate (Kotlin Android)

Pattaravit Kitjedtanee
1 min readSep 26, 2022

--

ณ ป่าเขา ขณะพระเจ้าตาสอนจันโครพ…

เจ้าเคยเจอปัญหา BaseClass บวมขึ้นเรื่อยๆ รือไม่ ในเมื่อ project ที่เจ้าทำ เริ่มใหญ่ขึ้นๆ
อีกทั้ง บางตัวที่ extend BaseClass มา ก็มีบาง feature ที่เจ้าไม่ได้อยากใช้…ละทำไง?

จันทโครพ: “ยัด flag แยกสิจารย์ ตัวไหนใช้ ก็ overide enabled เอาเลย…”

ดีกว่าไหมถ้าเจ้าทำ feature กลางเหล่านี้ ให้เลือก plug ได้เฉพาะที่เจ้าอยากจะใช้ อยากใช้อันไหนก็หยิบอันนั้นมา….. แต่เอ kotlin มัน extend ได้ Class เดียวนี่นะ ไหนเจ้าลองเดาสิ

จันทโครพ: “จะยากอะไร จารย์!! เราก็ extend เรื่อยๆดี้..”

แบมือมา!!! โหย…เส้นนี้ดีมากเลยจะได้แต่งงานเร็วนะพ่อหนุ่ม พ่ามม

เจ้าจันทโครพ รู้จัก วิชา Delegate ของ kotlin ไหม? จารย์จะสอนให้ มะมะมา เยิบมา

บัดนั้น..เงยย~ เง้อ… พอและ 5555

สมมติ

โดยจารย์ จะขอสมมติยังงี้นะ ว่า มี BaseViewModel ต้องการ handle การโชว์ address ปัจจุบันของเรา แต่ไม่ใช่ทุกตัวที่ extend ไปแล้วมีการโชว์ address นี้ตลอด

มาเริ่มกันเลย

  1. เตรียม BaseClass ที่เราอยากจะหั่น Feature ออก

2. สร้าง LocationFeature Interface ขึ้นมา

3. ทำการ delegate แล้วเอาไปแทนที่

จารย์แถม หากเจ้าใช้ koin อยู่แล้ว บ่ะ อะเอาไป๊

จันทโครพ: “เดียวนะจารย์ ทำไมเราไม่สร้าง คราสธรรมดา แล้วก็ inject มันเฉพาะคราสที่จะใช้ล่ะ”

งั้นมาลองเทียบกัน

สุดท้ายแล้ว จุดประสงค์ของการสร้าง value object ข้างใน กับ implement ก็ไม่เหมือนกันเนอะ อาจจะมีบางอย่างทดแทนกันได้ และไม่ได้ เจ้าก็สามารถเลือกใช้ได้ตามความเหมาะสม

เจ้าเห็นแล้วใช่ไหมว่า เราสามารถแยก LocationFeature ออกจาก BaseViewModel ได้ (เป็นแค่ตัวอย่างเนอะ) และเจ้าจะเห็นว่า มันเป็นการ implement บัดนั้น เจ้าจึงสามารถ ใส่ได้เรื่อยๆ ไม่เหมือน extend ที่ต้อง chain ต่อกันมาเรื่อยๆ

ด้วยเหตุชะนี้ เจ้าจงนำไปประยุกต์ใช้ตามแต่วัตถุประสงค์ของเจ้าเทิน เจ้า จันทโครพ~

คราหน้า พระเจ้าตาจะสอนใช้ implemented interface with method inside พระเจ้าตาเข้าใจว่า เจ้ารู้ ว่า interface ใน kotlin สามารถ สร้าง method ได้ แต่เพื่ออะไรล่ะ… ถ้าเจ้าไม่รู้.. พระเจ้าตาก็ไม่รู้ พ่ามม ไว้คราหน้า พระเจ้าตาจะมาทำให้ดู ไม่หนีจาก delegate หรอกจันทโครพ แล้วอย่าลืมมาหลงป่ากับจารย์นะ

--

--