MVP使用

这是的我的MVP分包结构,逻辑非常清晰
由于过年关系,没有时间继续跟大家继续聊聊mvp到底是个什么东东,为什么突然间被广大的程序员所接受呢?
作为程序员最头疼的事情无非就是更改需求,辛辛苦苦的写了大堆的代码,一个需求要改,就要牵一发而动全身,那种想把该需求的人杀死的冲动不用说你懂得。
但是现在福音来了,一个新的模式应运而生,就是接下来要为大家介绍的就是MVPAndroid的框架模式。写这篇博客之前,本人也参考了好多有关这方面的文章博客,介绍的都还不错,在这里,希望通过自己一个小小的demo实例帮助大家对MVP的应用有一个初步的了解,并且能够实际应用到项目当中,其实千篇一律,通过代码咱们开始吧。
做项目之前,肯定要了解项目的需求,实现什么功能,从而进行结构的分层,根据MVP模式,首先分出
model:处理业务逻辑操作数据
view:实现用户的交互,UI的显示,不与model有交互
Presenter:完全把Model和View进行了分离,主要的程序逻辑在Presenter里实现,通过定义好的接口进行交互,从而使得在变更View时候可以保持Presenter的不变,即重用!
需求:获取用户姓名,手机号信息,提交保存,然后再显示保存的用户信息
界面布局不用给大家了,很简单的控件,两个EditText,两个Button,一个TextView。
首先来看M层:

public interface IInfoModel {
      //获取数据方法
    InfoBean getInfo();
    //存入数据提供者方法
    void setInfo(InfoBean info);
}
简单的定义了两个方法。
实现这个接口:
public class IInfoModelImpl implements IInfoModel{
    private InfoBean infoBean=new InfoBean();
    @Override
    public InfoBean getInfo() {
        // TODO Auto-generated method stub
        return infoBean;
    }

    @Override
    public void setInfo(InfoBean info) {
        // TODO Auto-generated method stub
        infoBean=info;
    }

}
接下来看看View的接口:
public interface IInfoView {
    //给UI显示数据
    void setInfo(InfoBean info);
    //从UI取数据
    InfoBean getInfo();
}
同样是定义两个方法,一个在UI上显示数据,一个来获取从UI数据。
实现view:
public class MainActivity extends Activity implements IInfoView,View.OnClickListener{
    private EditText nameText,phoneText;
    private TextView textView;
    private Button preButton,getButton;
    private Presenter presenter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setViews();
    }

    private void setViews() {
        presenter=new Presenter(this);

        nameText=(EditText) findViewById(R.id.editText1);
        phoneText=(EditText) findViewById(R.id.editText2);
        preButton=(Button) findViewById(R.id.button1);
        getButton=(Button) findViewById(R.id.button2);
        textView=(TextView) findViewById(R.id.textView1);

        preButton.setOnClickListener(this);
        getButton.setOnClickListener(this);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public void setInfo(InfoBean info) {
        // TODO Auto-generated method stub
        StringBuilder stringBuilder=new StringBuilder("");
        stringBuilder.append(info.getName());
        stringBuilder.append("\n");
        stringBuilder.append(info.getPhone());
        textView.setText(stringBuilder.toString());
    }

    @Override
    public InfoBean getInfo() {
        // TODO Auto-generated method stub
        InfoBean infoBean=new InfoBean();
        infoBean.setName(nameText.getText().toString());
        infoBean.setPhone(phoneText.getText().toString());
        return infoBean;
    }
    @Override
  public void onClick(View view){
      switch (view.getId()) {
    case R.id.button1:
        presenter.saveInfo(getInfo());
        Toast.makeText(this, "提交成功", Toast.LENGTH_SHORT).show();
        break;
    case R.id.button2:
        presenter.getInfo();
        Toast.makeText(this, "获取成功", Toast.LENGTH_SHORT).show();
        break;

    default:
        break;
    }
  }
}

    看完发现代码这么多,不是应该更简单,反而显得代码臃肿了呢?一般这样的小demo没有必要使用MVP,体现不出来优越性,当你面对复杂的业务,比如网络连接,登录注册,判断等等复杂的逻辑的时候,你会深深的爱上MVP的。
    OK,M,V已经搞定,就差P了。通过Presenter将M V连接起来,现在可以这样理解。

public class Presenter {
private IInfoModel iInfoModel;
private IInfoView iInfoView;

public Presenter(IInfoView iInfoView){
    this.iInfoView=iInfoView;
    iInfoModel=new IInfoModelImpl();

}
//供UI调运
public void saveInfo(InfoBean bean) {
    iInfoModel.setInfo(bean);
}
//供UI调运
public void getInfo() {
    //通过调用IInfoView 的方法来更新显示
    //类似回调监听处理
    iInfoView.setInfo(iInfoModel.getInfo());
}

}
“`
看看效果:(由于制图水平有限,只能静态图了,大家凑合看吧)
提交数据
显示数据
现在回过头来看看MVP,其实就是通过调用接口,实现解耦和,减少view层代码的臃肿,实现V M的完全分离,小小总结下MVP的优点:
1,实现M V分离,结构清晰
2,实现代码复用
3,有利于单元测试
4,降低耦合度
5,代码灵活
大家赶紧尝试下吧!欢迎大家一起来学习交流!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值