android性能优化安卓开发知识程序员

android 开发之初学MVP设计模式(模拟登录)

2017-01-06  本文已影响559人  zzj丶

android 开发之初学MVP设计模式(模拟登录)

以模拟登录为例,学习MVP模式

一、新建工程,创建MVP目录结构

Paste_Image.png
1、activity  主要放activity界面
2、Model  M层 主要放基本实体类、接口和接口实现类
3、View   V层  view与presenter交互的接口,让Activity实现
4、Presenter  P层  Model与view的控制器,持有view和model的引用,从view中获取参数,交给model去处理,执行结果通过接口的方式通过presenter层传递给view层进行显示。

二、在veiw层中创建LoginView 接口,获取activity中需要的参数

Paste_Image.png

在Activity中实现该接口,将参数暴露给loginview

Paste_Image.png

三、在model层创建OnLoginListener接口 ,用来监听处理model实现后的操作;

Paste_Image.png

在presenter层创建LoginPresenter类实现OnLoginListener接口,用来处理model的View

/**
 * Created by zzj on 2017/1/6.
 */
public class LoginPresenter implements OnLoginListener {
    
    @Override
    public void onUsernameError() {
        
    }

    @Override
    public void onPasswordError() {

    }

    @Override
    public void onSuccess() {

    }

    @Override
    public void onFailure() {

    }
}

四、在model层创建登录接口(LoginPort),获取需要的参数

/**
 * 登录接口
 * Created by zzj on 2017/1/6.
 */
public interface LoginPort {

    void login(String username,String password,OnLoginListener onLoginListener);
}

在model层中创建loginModelImple类实现LoginPort接口,此类主要是处理网络请求的操作。由于本次未使用到网络请求,简单实现本地模拟登录。

/** 处理网络请求的操作
 * Created by zzj on 2017/1/6.
 */
public class LoginModelImple implements LoginPort {
    @Override
    public void login(String username, String password, OnLoginListener onLoginListener) {

        if(username.equals("admin")&&password.equals("123456")){
            onLoginListener.onSuccess();//登录成功
        }else if(!username.equals("admian")||!password.equals("123456")){
            onLoginListener.onUsernameError();//用户名或者密码错误
        }else {
            onLoginListener.onFailure();//登录失败
        }

    }
}

五、在LoginPresenter类中,声明实例化登录接口(LoginPort)和登录View(LoginView),将从view层获取的用户名和密码传送给model层,然后让activity中的登录按钮调用

/**
 * Created by zzj on 2017/1/6.
 */
public class LoginPresenter implements OnLoginListener {
    private LoginPort loginPort;//登录接口
    private LoginView loginView;//登录veiw
    //实例化登录接口和登录view
    public LoginPresenter(LoginView loginView){
        this.loginView = loginView;
        loginPort = new LoginModelImple();
    }
    /**
     * 将从view层中获取的用户名和密码传送给Model层
     * 然后让activity中的登录按钮调用此方法
     */
    public void login(){
        String username = loginView.getUsername();
        String password = loginView.getPassword();
        loginPort.login(username,password,this);
    }
    @Override
    public void onUsernameError() {
        loginView.showToast("用户名或者密码错误");
    }
    @Override
    public void onSuccess() {
        loginView.showToast("登录成功!");
    }
    @Override
    public void onFailure() {
        loginView.showToast("异常错误!");
    }
}

在loginAcitivy中实例化LoginPresenter类,调用login方法。

public class LoginActivity extends AppCompatActivity implements View.OnClickListener,LoginView {
    private AppCompatEditText username ,password;
    private AppCompatButton loginBt;
    private LoginPresenter loginPresenter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        loginPresenter = new LoginPresenter(this);
    }
    private void initView(){
        username = (AppCompatEditText) findViewById(R.id.login_username);
        password = (AppCompatEditText) findViewById(R.id.login_password);
        loginBt = (AppCompatButton) findViewById(R.id.login_loginbt);
        loginBt.setOnClickListener(this);
    }
    /**
     * 向view层暴露参数
     * @return 用户名
     */
    public String getUsername(){
        return username.getText().toString().trim();
    }
    public String getPassword(){
        return password.getText().toString().trim();
    }
    @Override
    public void showToast(String msg) {
        Toast.makeText(this,msg,Toast.LENGTH_SHORT).show();
    }
    @Override
    public void onClick(View v) {
        loginPresenter.login();
    }
}

效果展示:


Screenshot_1483695444.png Screenshot_1483695452.png

demo地址:https://github.com/z1060932884/MVPLoginDemo

上一篇下一篇

猜你喜欢

热点阅读