MVP(Kotlin)


mvp解耦性比mvc更好,model层负责提供数据,view层负责显示,presenter层负责逻辑处理,presenter层持有model层和view层,Activity持有presenter层。

IModel

interface IModel {

    fun destroy()

}

BaseModel

class BaseModel:IModel {

    override fun destroy() {

    }

}

IView

interface IView {

    fun showDialog()

    fun hideDialog()

    fun showToast(msg:String)

}

IPresenter

interface IPresenter {

    fun destroy()

}

BasePresenter

open class BasePresenter<M :IModel,V :IView> : IPresenter {
    override fun destroy() {

    }
}

IActivity

interface IActivity {

    fun bindLayout():Int

    fun initView()

    fun initData()

    fun inject()

}

BaseActivity

abstract class BaseActivity<P : IPresenter> : AppCompatActivity(), IView, IActivity {

    protected var mPresenter: P? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(bindLayout())

        inject()
        initView()
        initData()
    }

    override fun showToast(msg: String) {
        Toast.makeText(this, msg, Toast.LENGTH_SHORT)
    }

}

IFragmrnt

interface IFragment {

    fun bindLyout(): Int

    fun initView(view: View)

    fun inject()

    fun initData()
}

BaseFragment

abstract class BaseActivity<P : IPresenter> : AppCompatActivity(), IView, IActivity {

    protected var mPresenter: P? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(bindLayout())

        inject()
        initView()
        initData()
    }

    override fun showToast(msg: String) {
        Toast.makeText(this, msg, Toast.LENGTH_SHORT)
    }

}

Contract

契约类 方便管理

interface MainContract {

    interface MainView : IView {


    }

    interface MainModel : IModel {

    }
}

Model层

class MainModel :MainContract.MainModel {
    override fun destroy() {

    }
    //Model层负责提供数据  例如:网络请求接口等在model层完成
}

Presenter层

class MainPresenter : BasePresenter<MainContract.MainModel, MainContract.MainView>() {
	//Presenter层负责逻辑处理,持有model层和view层,可以通过model层中的方法获取到数据,view层中的方法更新UI
    override fun destroy() {
        super.destroy()
    }
    
}

View层

view层以Activity为载体,但Activity不是view,view中的方法在Activity中重写,进行更新UI的操作

class MainActivity :BaseActivity<MainPresenter>(),MainContract.MainView, View.OnClickListener {
    override fun onClick(v: View?) {
        when(v?.id){
            R.id.btn_one -> showToast("one")

            R.id.btn_two -> showToast("two")

        }
    }

    override fun showDialog() {

    }

    override fun hideDialog() {

    }

    override fun bindLayout(): Int {
        return R.layout.activity_main
    }

    override fun initView() {
        btn_one.setOnClickListener(this)
        btn_two.setOnClickListener(this)
    }

    override fun initData() {

    }

    override fun inject() {

    }


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值