史上最简单的MVP模式

来源:互联网 发布:社交网络利大于弊问题 编辑:程序博客网 时间:2024/05/18 01:07

本篇文章适合那些对MVP设计模式有一定了解但还不是很熟悉的同学。如果有写得不对的地方,欢迎指正。
那我们就来写一个简单的demo吧,从实例上来学比较快。就举一个登录的例子。
第一步:第一资源文件

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:id="@+id/activity_main"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context="com.example.my.myapplication.MainActivity"    android:weightSum="1">    <EditText        android:id="@+id/name"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:hint="请输入账号" />    <EditText        android:id="@+id/pass"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:hint="请输入密码" />    <Button        android:id="@+id/dengLu"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="登录" /></LinearLayout>

第二步:首先我们需要定义一个接口,接口干嘛用的???(握了棵草,也不讲讲清楚,上来就接口!!!)没关系,我在代码中给你注释了,不怕你看不懂。

public interface IMainView {    //登录成功,就调用这个方法    void LoginSuccess();    //登录失败,就调用这个方法    void LoginFailed(String msg);}

第三步,业务逻辑我们就写在Presenter里面

public class MainPresenter {    private IMainView view; //    public MainPresenter(IMainView view) {        this.view = view;    }    //处理登录逻辑    public  void login(String name,String pass){        if (name.isEmpty()||pass.isEmpty()){            view.LoginFailed("账号或密码不能为空");        }else if (name.length()<6||pass.length()<6){            view.LoginFailed("账号至少6位,密码至少6位");        }else if (name.equals(MainActivity.NAME)&&pass.equals(MainActivity.PASS)){            view.LoginSuccess();        }else {            view.LoginFailed("密码或用户名不正确");        }    }}

最后,我们要实现那个接口就行了

package com.example.my.myapplication;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;public class MainActivity extends AppCompatActivity implements IMainView, View.OnClickListener {    public static final String TAG = "MainActivity";    public static final String NAME = "123456";    public static final String PASS = "111111";    EditText nameText, passText;    Button mButton;    MainPresenter presenter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initView();    }    private void initView() {        nameText = (EditText) findViewById(R.id.name);        passText = (EditText) findViewById(R.id.pass);        mButton = (Button) findViewById(R.id.dengLu);        mButton.setOnClickListener(this);        presenter = new MainPresenter(this);    }    @Override    public void LoginSuccess() {        Toast.makeText(MainActivity.this,"登录成功",Toast.LENGTH_LONG).show();    }    @Override    public void LoginFailed(String msg) {        Toast.makeText(MainActivity.this,msg,Toast.LENGTH_LONG).show();    }    @Override    public void onClick(View v) {        switch (v.getId()) {            case R.id.dengLu:                String name = nameText.getText().toString();                String pass = passText.getText().toString();                presenter.login(name,pass);        }    }}

参考链接:http://www.jianshu.com/p/5c133a8a2b0d

2 0
原创粉丝点击