Android-MVP模式简单小案例

MVP模式的登录小案例;

MVP模式的核心思想

把Activity中的UI逻辑抽象成View接口,把业务逻辑抽象成Presenter接口,Model类还是原来的Moderl类;

作用

  • 1.分离视图逻辑和业务逻辑,降低耦合
  • 2.Activity只处理生命周期任务,代码简洁
  • 3.视图逻辑和业务逻辑抽象到了View和Presenter之中,提高可读性
  • 4.Presenter被抽象成接口,可以有多种具体的实现
  • 5.业务逻辑在Presenter中,避免后台线程引用Activity导致内存泄露

一、Model—User

既然是模拟登录,那么就需要我们的User类;

public class User {

    private String name;
    private String pwd;

    public User(String name, String pwd) {
        this.name = name;
        this.pwd = pwd;
    }

    public String getName() {
        return name;
    }

    public String getPwd() {
        return pwd;
    }

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

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }
}

二、View—BaseView

上面的核心思想也说了,将Activity的UI逻辑抽象成View接口,那么接下来我们实现它;
将UI逻辑,比如这次案例只需要用到的Toast,登录成功或者失败弹出,写成一个接口。

public interface BaseView {

    void showToast(String msg);//弹一个吐司

    void loginSuccess(String msg);//登陆成功

    void loginFail(String msg);//登录失败
}

三、Presenter—BasePresenter

把业务逻辑抽象成Presenter接口,模拟登录,那么业务逻辑肯定是点击登录按钮以后,发起的登录了。
这里我们需要三个方法,分别是绑定刚刚写好的BaseView,解绑,已经登录的逻辑;

public interface BasePresenter {

    void attachView(BaseView v);//绑定View

    void detachView();//分离View

    void login(User user);//登录逻辑

}

具体实现

首先我们的布局只是最简单的两个EditText加上一个Button;这里没什么好说的。
那么在我们的MainActivity之中通过findViewById找到他们,也是很基础的东西,这里也不多做解释。

第一步

MainActivity实现BaseView的接口。重写他的方法;

1.public class MainActivity extends AppCompatActivity implements BaseView

2.  @Override
    public void showToast(String msg) {
        Toast.makeText(this,msg,Toast.LENGTH_LONG).show();
    }

    @Override
    public void loginSuccess(String msg) {
        showToast(msg);
    }

    @Override
    public void loginFail(String msg) {
        showToast(msg);
    }

第二步

新建MainPresenterImpl实现BasePresenter接口。
实现它的方法,那么在这里,我们直接实现需要的业务逻辑。

 private BaseView mBaseView;

    @Override
    public void attachView(BaseView v) {
        this.mBaseView = v;
    }

    @Override
    public void detachView() {
        mBaseView = null ;
    }

    /**
     *
     * 登录的逻辑
     * @param user
     */
    @Override
    public void login(User user) {
        if (!TextUtils.isEmpty(user.getName())&&!TextUtils.isEmpty(user.getPwd())){
            if (user.getName().equals("123")&&user.getPwd().equals("123")){
                mBaseView.loginSuccess("登陆成功");
            }else {
                mBaseView.loginFail("登录失败");
            }
        }else{
            mBaseView.showToast("用户名或者密码不能为空");
        }
    }

第三步

最后也是最重要的一步,首先,需要点击登录按钮,才要去实现登录的逻辑,因此在按钮的点击事件里面我们需要实现业务逻辑。

 private MainPresenterImpl mPresenter;//定义业务逻辑;

mPresenter = new MainPresenterImpl();
        mPresenter.attachView(this);//初始化;

        mButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                User user = new User(name.getText().toString().trim(),pwd.getText().toString().trim());
                mPresenter.login(user);//实现需要的业务逻辑;
            }
        });

总结

大致上就是这样,有点基础的看看代码就能理解了。主要思想也就是将UI逻辑抽象成View接口,把业务逻辑抽象成Presenter接口。
Activity再去实现View接口,定义一个Presenter类实现Presenter接口。最后再去Activity初始化,在需要执行某一逻辑的时候执行。
这样就能实现一个最简单的MVP模式的小例子。
不过这样还有一个问题,那就是如果又有一个OtherActivity也需要实现Toast,以及绑定+解绑View。那就需要转换一下小小的思路了。


项目代码

你可能感兴趣的:(Android-MVP模式简单小案例)