SAM : Single-Abstract Method
// SAM
class A : ClickEvent{
fun main {
var b = B()
b.clickEvent = this
}
fun onClick(view : View){
// B에서 onClick 이벤트 발생하면 여기서 처리
}
fun onLongClick(view : View){
// B에서 onLongClick 이벤트 발생하면 여기서 처리
}
}
class B {
var clickEvent : ClickEvent? = null
fun main {
clickEvent.onClick(view)
}
}
interface ClickEvent{
fun onClick(view : View)
fun onLongClick(view : View)
}
HOF : Higher-Order Function
// Higher-Order Functions
class A {
fun main {
var b = B(
onClick = { // B에서 onClick 이벤트 발생하면 여기서 처리 },
onLongClick = { // B에서 onLongClick 이벤트 발생하면 여기서 처리 }
)
}
}
// 또는
class A {
fun main {
var b = B(onClick = onClickInA, onLongClick = onLongClickInA)
}
fun onClickInA(view : View){
// B에서 onClick 이벤트 발생하면 여기서 처리
}
fun onLongClickInA(view : View){
// B에서 onLongClick 이벤트 발생하면 여기서 처리
}
}
class B (val onClick: (View) -> Unit, val onLongClick: (View) -> Unit) {
fun main {
onClick.invoke(view)
}
}