Kotlin mvp 泛型 demo
github地址:https://github.com/haoda2328/mvpdemo
mvp模式已经出来很久了,最近用到了kotlin随即将kotlin版的泛型mvp写了一个demo,mvp相当于以mvc的主要差异是v 跟 p层的 依附,demo主要呈现了是activity 跟presenter的依附过程跟数据传递过程
1、基础 BaseView 接口定义
interface BaseView {
fun showName(name: String)
fun showAge(age: String)
fun showSex(sex: String)
}
2、基础 BasePresenter 抽象类定义
/**
*
* @author hao2.ling
* @date 2021/3/8
* BasePresenter 要 Attach BaseView 此处持有 BaseView 的子类泛型 T
*/
abstract class BasePresenter<T : BaseView> {
fun getView(): T? {
return mReference?.get()
}
var mReference: Reference<T>? = null
/**
* 弱引用(WeakReference)只具有弱引用的对象拥有更短暂的生命周期。在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存。
* 软引用 (SoftReference)当内存不足时避免oom才会释放内存
*/
fun onAttach(view: T) {
mReference = WeakReference<T>(view)
}
abstract fun initData();
abstract fun getName()
abstract fun getAge()
abstract fun getSex()
}
3、mvp 基础Activity BaseActivity
abstract class BaseActivity<T : BasePresenter<BaseView>> : BaseView, AppCompatActivity() {
protected var mPresenter: T? = null
abstract fun initPresenter()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
initPresenter();
mPresenter?.onAttach(this);
}
}
4、要实现的具体 StudentActivity 类
class StudentActivity : BaseActivity<StudentPresenter>() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_student)
mPresenter?.initData();
}
override fun initPresenter() {
mPresenter = StudentPresenter()
}
override fun showName(name: String) {
tv_name.text = name
}
override fun showAge(age: String) {
tv_age.text = age
}
override fun showSex(sex: String) {
tv_sex.text = sex
}
}
5、具体Activiy 相对应的Presenter StudentPresenter ,此处的m层省略.....
class StudentPresenter : BasePresenter<BaseView>() {
override fun initData() {
getName()
getAge()
getSex()
}
override fun getName() {
getView()?.showName("白云城主叶孤城")
}
override fun getAge() {
getView()?.showAge("42")
}
override fun getSex() {
getView()?.showSex("男")
}
}