Android MVP开发框架

Android MVP开发框架
MVP

MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数据,View负 责显示。作为一种新的模式,MVP与MVC有着一个重大的区别:在MVP中View并不直接使用Model,它们之间的通信是通过Presenter (MVC中的Controller)来进行的,所有的交互都发生在Presenter内部,而在MVC中View会从直接Model中读取数据而不是通过 Controller。

MVP框架图 (图片来源于网络)

在这里插入图片描述

案例

在这里插入图片描述

案例代码
CallBack 数据处理返回接口
/**
 * 数据返回接口
 */
public interface CallBack {
    void onSuccess(Account account);
    void onFailed();
}
Account 实体类
public class Account  {
    private String name;
    private int level;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getLevel() {
        return level;
    }

    public void setLevel(int level) {
        this.level = level;
    }
}

MvpModel 数据处理层
public class MvpModel {

    public void setAccountData(String accountName, CallBack callBack){
        Random random=new Random();
        boolean isSuccess=random.nextBoolean();
        if (isSuccess){
            Account account=new Account();
            account.setName(accountName);
            account.setLevel(100);
            callBack.onSuccess(account);
        }else {
            callBack.onFailed();
        }
    }
}
MvpPresenter Presenter 层
public class MvpPresenter {
    MvpView mvpView;
    MvpModel mvpModel;

    public MvpPresenter(MvpView mvpView) {
        this.mvpView = mvpView;
        mvpModel=new MvpModel();
    }

    public void getData(){
        mvpModel.setAccountData(mvpView.getDataString(), new CallBack() {
            @Override
            public void onSuccess(Account account) {
                mvpView.showSuccessPage(account);
            }

            @Override
            public void onFailed() {
                mvpView.showFailedPage();
            }
        });
    }
}
MvpView 页面数据接口
public interface MvpView {
    String getDataString();
    void showSuccessPage(Account account);
    void showFailedPage();
}
MainActivity
/**
 * 作者:Rain
 * 联系vx:rain_20181318 (备注:轻语积累)
 * 公众号:轻语积累
 */
public class MainActivity extends AppCompatActivity  implements View.OnClickListener, MvpView {
    EditText et_text;
    Button btn;
    TextView content;

    MvpPresenter presenter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        presenter=new MvpPresenter(this);
    }

    private void initView() {
        et_text=findViewById(R.id.et_text);
        btn=findViewById(R.id.btn);
        content=findViewById(R.id.content);
        btn.setOnClickListener(this);

    }

    @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.btn:
                presenter.getData();
                break;
        }
    }

    @Override
    public String getDataString() {
        return et_text.getText().toString();
    }

    @Override
    public void showSuccessPage(Account account) {
        content.setText("用户账户:"+account.getName()+"|"+"等级:"+account.getLevel());
    }

    @Override
    public void showFailedPage() {
        content.setText("页面获取失败");
    }
}
activity_main.xml 页面
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center"
    tools:context=".MainActivity">

    <EditText
        android:id="@+id/et_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="输入框"/>


    <Button
        android:id="@+id/btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="获取内容"/>

    <TextView
        android:id="@+id/content"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

</LinearLayout>

MVP 与MVC 的差别

1.Model与View不再直接进行通信,而是通过中间层presenter来实现。

2.Activity的功能被简化,不再充当控制器,主要负责View层面的功能

MVP优缺点

优点

解决了MVC中Controller 与View 过度耦合的缺点,职责划分明显,更加易于维护

缺点

接口数量变多,项目复杂度升高,随着项目复杂度的提升,Presenter层将越来越臃肿。

使用MVP建议

1.接口规范化(封装父类接口以减少接口的使用量)

2.使用第三方插件自动生成MVP代码

3.对于一些简单的界面可以选择不使用MVP框架

4.根据项目复杂程度,部分模块可以选择不使用接口

代码获取

关注微信公众号: 轻语积累

回复关键字: 源码

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值