理論:android
Presenter負責邏輯的處理,Model提供數據,View負責顯示架構
MVP架構模式對於MVC模式主要特色是View 和 Model的徹底分離,全部的交互都經過Presenter這個中間者。ide
優勢:單元測試
1. model 和 view徹底分離,能夠修改視圖而不影響模型測試
2. 易於解決內存泄露問題fetch
3. 能夠更方便的單元測試this
練習:spa
1,定義一個接口Iview;code
public interface Iview { void showToast(); void showList(List<String> list); }
2,寫一個model類以獲取數據對象
public class DemoModel { public List getData(){ List<String> list = new ArrayList(); list.add("one"); list.add("two"); list.add("three"); list.add("four"); list.add("five"); return list; } }
3,presenter類獲得view和model的引用
public class DemoPresenter { Iview view; DemoModel model; public DemoPresenter(DemoModel demoModel){ model = demoModel; } public void attach(Iview view){ this.view = view; } public void detache(){ this.view = null; } public void fetch(){ List data = model.getData(); view.showList(data); view.showToast(); } }
4.Activity實現Iview
class MainActivity : AppCompatActivity(), Iview { lateinit var mListView:ListView var mDemoPresenter:DemoPresenter? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) mDemoPresenter = DemoPresenter(DemoModel()) mDemoPresenter?.attach(this) initView() mDemoPresenter?.fetch() } private fun initView() { mListView = findViewById<ListView>(R.id.mListView) } override fun showToast() { Toast.makeText(this,"ok",Toast.LENGTH_SHORT).show() } override fun showList(list: MutableList<String>?) { mListView.adapter = ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,list) } override fun onDestroy() { mDemoPresenter?.detache() mDemoPresenter = null super.onDestroy() } }
5,在Activity中實例一個Presenter與之綁定,綁定後經過presenter對象調用fetch()來獲取數據並顯示。