(未完成)【Android】MVP模式初见(一)

最近在阅读郭霖大神的公众号时,分类中架构引起了我的注意。

虽然是个人开发(水平很菜的那种),但最终都要向企业正式项目开发靠近。因此接下来一段时间,主要学习一下MVP架构、Retrofit以及RxJava

本篇文章来自study_zhxu,博客地址:http://blog.csdn.net/study_zhxu

本篇文章未完成,仅做学习记录


MVP把Activity中的UI逻辑抽象成View接口,把业务逻辑抽象成Presenter接口,Model类还是原来的Model。
在MVP模式中,Activity的功能就是响应生命周期和显示界面,具体其他工作都丢到了Presenter层中进行完成,Presenter其实是Model层和View层的桥梁。


创建MVP步骤:
1.创建IPresenter接口,把所有业务逻辑的接口都放在这里,并创建它的实现PresenterCompl(在这里可以方便查看业务逻辑功能,由于接口可以有多种实现所以也方便写单元测试)
2.创建IView接口,把所有视图逻辑的接口都放在这里,其实现类是当前的Activity/Fragment
3.Aactivity中只包含了一个IPresenter,而PresenterCompl里又包含了一个IView并且依赖了Model。Activity里只保留了IPresenter的调用,其他工作全部留到PresenterCompl中实现。
4.Model并不是必须有的,但是一定会有View和Presenter。

直接上例子:

1.创建Presenter接口

ILoginPresenter

package com.paul.learningmvp.presenter;

public interface ILoginPresenter {
    //清除输入框
    public void clear();
    //登录操作
    public void doLogin(String name,String password);
}

实现ILoginPresenteeer

LoginPresenterCompl

package com.paul.learningmvp.presenter;

import com.paul.learningmvp.model.User;
import com.paul.learningmvp.view.ILoginView;


public class LoginPresenterCompl implements ILoginPresenter {

    private ILoginView loginView;
    private User user;

    public LoginPresenterCompl(ILoginView loginView) {
        this.loginView = loginView;
        user=new User("110","123456");
    }

    @Override
    public void clear() {
        loginView.onClearText();
    }

    @Override
    public void doLogin(String name, String password) {
        boolean result=false;
        int code=0;
        if(name.equals(user.getName())&&password.equals(user.getPassword())){
            result=true;
            code=1;
        }else {
            result=false;
            code=0;
        }
        loginView.onLoginResult(result,code);
    }
}

2.创建IView接口,所有对View的操作写在这里,和Presenter相关

ILoginView

package com.paul.learningmvp.view;

public interface ILoginView {
    public void onClearText();
    public void onLoginResult(Boolean result,int code);
}

Activit是IView接口的实现类

LoginActivity

package com.paul.learningmvp.view;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.paul.learningmvp.R;
import com.paul.learningmvp.presenter.ILoginPresenter;
import com.paul.learningmvp.presenter.LoginPresenterCompl;
import com.paul.learningmvp.view.ILoginView;

public class LoginActivity extends AppCompatActivity
                                implements ILoginView, View.OnClickListener {

    private Button mLogin;
    private Button mClear;
    private EditText mName;
    private EditText mPassword;
    ILoginPresenter loginPresenter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mLogin=findViewById(R.id.btn_confirm);
        mClear=findViewById(R.id.btn_clear);
        mName=findViewById(R.id.tv_name);
        mPassword=findViewById(R.id.tv_password);

        mLogin.setOnClickListener(this);
        mClear.setOnClickListener(this);
        loginPresenter=new LoginPresenterCompl(this);
    }

    @Override
    public void onClearText() {
        mName.setText("");
        mPassword.setText("");
        Toast.makeText(this,"clear",Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onLoginResult(Boolean result, int code) {
        mLogin.setEnabled(true);
        mClear.setEnabled(true);
        if(result){
            Toast.makeText(this,"登录成功",Toast.LENGTH_SHORT).show();
        }else {
            Toast.makeText(this,"登录失败",Toast.LENGTH_SHORT).show();
        }
    }

    @Override
    public void onClick(View v) {
        String name=mName.getText().toString();
        String password=mPassword.getText().toString();
        switch (v.getId()){
            case R.id.btn_confirm:
                loginPresenter.doLogin(name,password);
                break;
            case R.id.btn_clear:
                loginPresenter.clear();
                break;
        }
    }
}

3.model

User

package com.paul.learningmvp.model;

public class User {
    private String name;
    private String password;

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

    public String getName() {
        return name;
    }

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

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}
原文地址:https://www.cnblogs.com/robotpaul/p/11864927.html