Last active
December 9, 2021 19:24
-
-
Save MrOnyszko/a4bdf3a6dc8dc469173f29b88037b388 to your computer and use it in GitHub Desktop.
MVP Pattern Implementation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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