lpf2472308787

研究MVP有一段时间了,一直有点迷糊。讲对于MVP的理解没问题,但是开发中使用还是有点懵。下午下了MVP的官方demo研究一段时间,有点感悟。记录下来。

一、理解 接口

   看完官方demo,准备自己写个demo。写的时候发现好像不用接口也能实现同样的效果。那还实现接口有什么用呢。百度了下接口的作用:多态。定义一个接口,写一实现方法。万一以后我们需要修改界面的时候,只要在新的界面实现接口中定义的方法就好,对业务逻辑没有什么影响。这也是我们使用设计模式的重要原因。此外,看到官方demo中的接口还用于回调,本着能简就简,先理解MVP的原则,可耻的把回调的接口用别的方式替换了

二、开工

 

  先写了一个登录界面的接口,里面就一个方法用于登录成功后跳转。

public interface LoginActivityInterFace {
public void IntentToMainActivity();

}

再在登录界面实现了这个接口,并在这个方法中填写了跳转的逻辑

public void IntentToMainActivity() {
Intent Intent=new Intent(this, MainActivity.class);
startActivity(Intent);
finish();
}
当我们点击登录的时候,我们在点击事件中调用了Presenter的设置登录数据方法
Btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Presenter.SetLoginData(UserName.getText().toString(),UserPwd.getText().toString());
    }
});

先实现一个Presenter的接口,主要有两个方法,一个是设置登录数据,用于把收到的数据传递到 Model中,一个用于Model处理完数据以后,实现登录界面的跳转
public interface PresenterInterFace {

void SetLoginData(String UserName, String UserPwd);

void Success();

}
再实现Presenter这个类。SetLoginData方法往Model中传数据,Success方法用于界面的跳转。
public class Presenter implements PresenterInterFace {
ModelInterFace Model;
LoginActivityInterFace LoginView;

public Presenter(LoginActivityInterFace LoginView) {
this.LoginView = LoginView;
this.Model = new Model(this);
}

@Override
public void SetLoginData(String UserName, String UserPwd) {
Model.setLogin(UserName, UserPwd);
}
@Override
public void Success() {
LoginView.IntentToMainActivity();
}
}

Model接口中就一个方法,用于处理数据

public interface ModelInterFace {
void setLogin(String name, String pwd);
}

Model类,自己测试理解用,比较随意。账号密码正确后调用Presenteritf.Success()实现页面跳转。

public class Model implements ModelInterFace {
PresenterInterFace Presenteritf;

public Model(PresenterInterFace Presenteritf) {
this.Presenteritf = Presenteritf;
}

@Override
public void setLogin(String name, String pwd) {
if (name.equals("asd") && pwd.equals("123")) {
Presenteritf.Success();
}
}


假如后期页面调整,我们只要重新写个继承LoginActivityInterFace的activity,重新实现IntentToMainActivity中的方法就好,业务逻辑不用动,业务发生变化一样的。


-------------------------------------------------------------------------------
应该是最简单的MVP了,希望对各位有点帮助,也希望各位能批评指正。



分类:

技术点:

相关文章: