Android mvp

来源:互联网 发布:编译php扩展 编辑:程序博客网 时间:2024/05/17 22:17

当下mvp开发模式较流行,那咱们要跟上时代的步伐!之前一直用的是MVC开发模式,那到底有哪点不同那呢,让我们一起来看看。

mvc模式:

这里写图片描述

mvp模式:

这里写图片描述

看着这两张图你会发现,其实就是让activity不在做控制层了,我们知道,mvc最大的麻烦是可能造成Activity过于冗余。
但mvp成功的解决了这个问题。
下面我们就以一个小例子为例:

1.先看看这个架构:
这里写图片描述

2.一步步解析:

(1)IEpilogizeView 接口用于与Presenter经行交互。
public interface IEpilogizeView {

//获取输入的信息String getEditTextInfo();//获取返回结果void dataResult(String text);

}

(2)EpliogizePresenter 充当控制层,IAddEpliogizp 为model层与presenter的交互接口
public class EpliogizePresenter implements IAddEpliogizp {

private IEpilogizeView iEpilogizeView;private AddEpliogzipCompl addEpliogzipCompl;public EpliogizePresenter(IEpilogizeView iEpilogizeView){    this.iEpilogizeView=iEpilogizeView;    addEpliogzipCompl=new AddEpliogzipCompl(this);}//业务操作public void addEpilogize(){  //假如这里需要进行复杂的逻辑运算,就需要在modle层进行操作    addEpliogzipCompl.getParameters(iEpilogizeView.getEditTextInfo());}@Overridepublic void getResult(String string) {    //从model获取结果,再通过view接口改变布局    iEpilogizeView.dataResult(string);}

}

(3)IAddEpliogizp 为model层与presenter的交互接口

public interface IAddEpliogizp {

//经过复杂逻辑运算所得结果void getResult(String string);

}

(4)Model处理业务逻辑实例
public class AddEpliogzipCompl {

private IAddEpliogizp iAddEpliogizp;public  AddEpliogzipCompl(IAddEpliogizp iAddEpliogizp){    this.iAddEpliogizp=iAddEpliogizp;}public void getParameters(String string) {    String str=string+"LOVE";    iAddEpliogizp.getResult(str);}

}

(5)MainActivity 的实现
public class MainActivity extends Activity implements View.OnClickListener,IEpilogizeView{

private EditText editText;private Button button;private EpliogizePresenter epliogizePresenter;@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    epliogizePresenter=new EpliogizePresenter(this);    //初始化控件    initControl();}private void initControl(){    editText=getView(R.id.edit);    button=getView(R.id.button);    button.setOnClickListener(this);}@Overridepublic void onClick(View v) {    switch (v.getId()){        case R.id.button:         //把所有操作交给presenter         epliogizePresenter.addEpilogize();        break;    }}@Overridepublic String getEditTextInfo() {    return editText.getText().toString().trim();}@Overridepublic void dataResult(String text) {    editText.setText(text);}private  <T extends View> T getView(int id){    T result= (T) findViewById(id);    return result;}

}

1 0
原创粉丝点击