zoukankan      html  css  js  c++  java
  • Android为TV端助力 MVP设计模式!

    实现原理:

    MainActivity 用来更新UI,和显示业务逻辑的结果!

    LoginPresenterCompl 用来处理 业务逻辑

    ILoginPresenter 业务处理类抽象出来的接口

    ILoginView activity抽象出来的接口

    1.为什么要把activity的UI更新方法抽象出来?

    因为你的项目不可能只有一个activity吧,如果想要每个activity都用MVP模式,那么就把共有的方法抽象出来就可以的

    2.为什么要把业务处理类抽象出来?

    同理,每个activity的业务处理逻辑肯定是不一样的,我们可以使用java的特性,即重写,虽然每个业务类的方法名,参数,返回类型相同,但是我们可以在里面处理不同的逻辑

    比如A在里面处理吃西瓜,B在里面处理吃梨子,返回的都是水果类型!

    3.为什么要用MVP模式?

    当你的代码量很多的时候,如果不采用较好的框架,后续维护和查找就会显得很乱,自己都不知道从来找,出现问题第一时间也没办法分析出来,总之一个好的APK,最好是在前期采用好的框架搭建!

    首先是activity的代码:

    ublic class MainActivity extends Activity implements ILoginView{

    private Button button1;
    private Button button2;
    private EditText edit1;
    private EditText edit2;
    private ILoginPresenter presenterCompl;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    presenterCompl = new LoginPresenterCompl(this);
    button1 = (Button)findViewById(R.id.button1);
    button2 = (Button)findViewById(R.id.button2);
    edit1 = (EditText)findViewById(R.id.edit1);
    edit2 = (EditText)findViewById(R.id.edit2);

    button1.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
    presenterCompl.doLogin(edit1.getText().toString(), edit2.getText().toString());
    }
    });
    button2.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
    presenterCompl.clear();
    }
    });

    }
    @Override
    public void onClearText() {
    edit1.setText("");
    edit2.setText("");
    Toast.makeText(getApplicationContext(), "clear", 1).show();
    }

    @Override
    public void onLoginResult(Boolean result, int code) {
    if(result){
    Toast.makeText(getApplicationContext(), "登录成功", 1).show();
    }else{
    Toast.makeText(getApplicationContext(), "登录失败", 1).show();
    }
    }

    }

    他实现了ILoginView接口,这个接口定义的两个方法,一个用来清除edittext的数据,一个用来显示逻辑任务类的处理结果,结果的方法可以根据自己公司具体业务需求来定!

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

    接下来是逻辑任务类LoginPresenterCompl

    public class LoginPresenterCompl implements ILoginPresenter{
    private ILoginView mView;
    private User user;
    @Override
    public void clear() {
    mView.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;
    }
    mView.onLoginResult(result, code);
    }
    public LoginPresenterCompl(ILoginView view) {
    this.mView = view;
    user = new User("000","123456");
    }
    }

    这个类实现了ILoginPresenter接口,因为你以后项目的逻辑任务肯定不止一种情况,所以我们抽象出来共同的方法

    只要实现这个接口就行,具体的任务逻辑看自己公司需要,比如我们公司采用的登录验证,在activity中获得用户输入

    的账号和密码,然后跟实体类的数据进行对比(注意这里的实体类是为了方便才这样写的,实际情况应该是从数据库中

    或者从网络请求中获取数据然后保存到实体类,这里就不具体说了),最后调用activity里面抽象出来的更新UI的方法,

    实际上就是把结果返回给activity的,因为activity实现了这个这个接口!

    public interface ILoginPresenter {
    public void clear();
    public void doLogin(String name, String password);
    }

    实体类:

    public class User {
    private String name;
    private String password;
    public User(String name,String pwd) {
    this.name = name;
    this.password = pwd;
    }
    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;
    }
    @Override
    public String toString() {
    return "User [name=" + name + ", password=" + password + "]";
    }

    }

  • 相关阅读:
    精通CSS高级Web标准解决方案(5、对列表应用样式和创建导航条)
    精通CSS高级Web标准解决方案(4、对链接应用样式)
    精通CSS高级Web标准解决方案(3-1 背景图像与图像替换)
    【高性能并行计算】——第一课
    动态规划算法详解及经典例题
    分治算法详解及经典例题
    CUDA线程、线程块、线程束、流多处理器、流处理器、网格概念的深入理解
    【模式识别与机器学习】——最大似然估计 (MLE) 最大后验概率(MAP)和最小二乘法
    【计算机算法设计与分析】——NP
    【模式识别与机器学习】——PCA与Kernel PCA介绍与对比
  • 原文地址:https://www.cnblogs.com/xiaoxiaing/p/5833294.html
Copyright © 2011-2022 走看看