Skip to content

Instantly share code, notes, and snippets.

@MrOnyszko
Last active December 9, 2021 19:24
Show Gist options
  • Save MrOnyszko/a4bdf3a6dc8dc469173f29b88037b388 to your computer and use it in GitHub Desktop.
Save MrOnyszko/a4bdf3a6dc8dc469173f29b88037b388 to your computer and use it in GitHub Desktop.
MVP Pattern Implementation
import java.util.Scanner
fun main() {
val presenter: UserContract.UserPresenter = UserPresenterImpl()
val view: UserContract.UserView = UserViewImpl(presenter)
view.init()
}
interface UserContract {
interface UserView {
fun init()
fun update(name: String, age: Int)
}
interface UserPresenter {
fun init(view: UserView)
fun setName(name: String)
fun setAge(age: Int)
}
data class UserModel(
val name: String,
val age: Int,
)
}
class UserViewImpl(
private val presenter: UserContract.UserPresenter
) : UserContract.UserView {
override fun init() {
presenter.init(this)
setUpform()
}
override fun update(name: String, age: Int) {
println("Name: $name | age: $age")
}
private fun setUpform() {
val scanner = Scanner(System.`in`)
val name = scanner.nextLine()
presenter.setName(name)
val age = scanner.nextInt()
presenter.setAge(age)
}
}
class UserPresenterImpl : UserContract.UserPresenter {
lateinit var view: UserContract.UserView
private var user = UserContract.UserModel(
name = "",
age = 0
)
override fun init(view: UserContract.UserView) {
this.view = view
this.view.update(user.name, user.age)
}
override fun setName(name: String) {
user = user.copy(name = name)
view.update(user.name, user.age)
}
override fun setAge(age: Int) {
user = user.copy(age = age)
view.update(user.name, user.age)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment