MVP 契约模式(Kotlin)
程序员文章站
2022-06-08 22:23:38
...
1.创建View、Presenter和Model的基类
interface BaseModel
interface BasePresenter
interface BaseView
2.创建契约类Contract管理View、Presenter和Model的接口
interface TestContract {
interface View : BaseView {
fun setLoadUser(s: String)
}
interface Presenter : BasePresenter {
fun loadUser()
fun onDestroy()//必须
}
interface Model : BaseModel {
fun loadUser(): String
}
}
3.创建Model实现接口
class TestModel : TestContract.Model {
override fun loadUser(): String {
return "View --> Presenter --> Model --> Presenter --> View"
}
}
4.创建Presenter控制器
class TestPresenter(private var mView: TestContract.View?, private val mModel: TestContract.Model) : TestContract.Presenter {
override fun loadUser() {
//2.Presenter --> Model
val msg = mModel.loadUser()
//3.Model返回值 --> Presenter --> View
mView?.setLoadUser(msg)
}
override fun onDestroy() {
mView = null
}
}
注意,需要在Activity的onDestroy取消对view的持有防止内存泄漏
override fun onDestroy() {
testPresenter.onDestroy()
super.onDestroy()
}
5.创建View
class TestActivity : AppCompatActivity(), TestContract.View {
private lateinit var testPresenter: TestPresenter
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_test)
init()
}
private fun init() {
testPresenter = TestPresenter(this, TestModel())
button.setOnClickListener {
//1.View --> Presenter
testPresenter.loadUser()
}
}
override fun setLoadUser(s: String) {
//4.Presenter --> view
textView.text = s
}
override fun onDestroy() {
testPresenter.onDestroy()
super.onDestroy()
}
}
上一篇: Mybatis初步入门
下一篇: jsp自定义标签入门