Android MVP案例;

就一个十分简单的获取列表数据并展示的Demo;分别使用MVC和MVP实现;

先来一个假的数据源:

//假设这就是数据源
public class UserBean {
    public static List<String> datas = Arrays.asList("CCB","JY","YHL","ZQ","ZJH","XSN");
}

MVC模式:

public class CActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_c);
        TextView tv = findViewById(R.id.tv);
       List<String> datas = UserBean.datas;
       StringBuilder stringBuilder = new StringBuilder();
        for (int i = 0; i <datas.size() ; i++) {
            stringBuilder.append("\n"+datas.get(i));
        }
        tv.setText(stringBuilder);
    }
}

完成,十分的简单;

如果业务逻辑比较简单,没有必要使用MVP模式。MVP模式的优点就是解耦性强,让界面只专注UI的处理,跟Android API无关的业务逻辑由 Presenter 层来完成

好了,接下来是MVP模式了:认真学认真看;

首先定义一个UserContract类,它是V和P的中间层,也是M给P反馈信息的载体;

public interface UserContract {
    /**
     * View接口是Activity(Fragment)Presenter层的中间层,它的作用是根据具体业务的需要,
     * Presenter提供调用Activity中具体UI逻辑操作的方法
     */
     interface View extends BaseView<Presenter>{
        void showText(List<String> datas);
    }

    /**
     * Presenter接口是Model层给Presenter层反馈请求信息的传递载体,
     * 所以需要在Presenter中定义数据请求的各种反馈状态:
     */
    interface Presenter extends BasePresenter{
       void setData();
       void login();
    }
}

通用的方法定义两个基类,写在基类中:

public interface BaseView<T> {
    void setPresenter(@NonNull T presenter);
    void showDialog();
    void dissmisDialog();
    void onError();
}
public interface BasePresenter {
    void start();
}

接下来是UserPresenter类,它就是P层;

public class UserPresenter implements UserContract.Presenter{

    /**
     * UserPresenter类是具体的逻辑业务处理类,负责请求数据,并对数据请求的反馈进行处理。
     UserPresenter类的构造方法中有一个View接口的参数,是为了能够通过View接口通知Activity进行更新界面等操作。
     */
    private UserContract.View v;
    public UserPresenter(UserContract.View v){
        this.v = v;
        this.v.setPresenter(this);
    }

    @Override
    public void start() {
        v.showText(UserBean.datas);
    }

    @Override
    public void setData() {

    }

    @Override
    public void login() {

    }
}

V层:Activity:

/**
 * 调用UserPresenter就要先实现Presenter需要的对应的View接口
 */
public class PActivity extends AppCompatActivity implements UserContract.View{

    private TextView tv;
    private UserContract.Presenter presenter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_c);
        tv = findViewById(R.id.tv);
        new UserPresenter(this);
        presenter.start();
    }


    @Override
    public void showText(List<String> datas) {
        StringBuilder stringBuilder = new StringBuilder();
        for (int i = 0; i <datas.size() ; i++) {
            stringBuilder.append("\n"+datas.get(i));
        }
        tv.setText(stringBuilder);
    }

    @Override
    public void setPresenter(@NonNull UserContract.Presenter presenter) {
        this.presenter = presenter;
    }

    @Override
    public void showDialog() {

    }

    @Override
    public void dissmisDialog() {

    }

    @Override
    public void onError() {

    }
}


猜你喜欢

转载自blog.csdn.net/qq_35605213/article/details/80181730
今日推荐