美文网首页
MVP模式编程实例

MVP模式编程实例

作者: xlq | 来源:发表于2018-07-23 20:11 被阅读0次

概念:

M(model) : 数据,以及数据处理逻辑
V(view) : 界面,及界面UI的显示,变化
P(presenter) : 中间人,M和V互不干涉,全靠P做交互。
简单来说,M和V的代码中,各自实现各自的逻辑,不能有对方相关代码。P的代码中,必须有MV的代码,用来二者交互。

实例:
输入城市名,查询该地的天气情况,并显示在界面上。
天气数据是虚构的,获取数据不是今天的重点,我们先用虚构的数组代替。

代码结构如下图:


code.png

效果图如下:


aaa.png

首先对于IModel.java来说,他的逻辑仅限于返回一个天气的String,所以接口中只有一个方法:

package com.xlq.demo.weathermvpdemo.model;

public interface IModel {
    String getWeather(String s);
}

而ModelImp.java 是对IModel接口的实现,逻辑非常简单,代码如下:

package com.xlq.demo.weathermvpdemo.model;

public class ModelImp implements IModel {

    private String[] mCityName = {
            "长沙", "武汉",
            "上海", "北京",
            "南京", "深圳", "合肥"};
    private String[] mWeatherStr = {
            "阴天,20~28",
            "晴天,24~30",
            "晴天,23~40",
            "中雨,15~24",
            "中雨转阴,10~18",
            "小雨转晴,22~28",
            "晴天,23~31"};

    @Override
    public String getWeather(String s) {
        for (int i=0; i < mCityName.length; i ++){
            if (s.equals(mCityName[i])){
                return mWeatherStr[i];
            }
        }
        return null;
    }
}

以上就是model的写法。

其次就是View,首先判断他需要哪些接口。

package com.xlq.demo.weathermvpdemo.view;
public interface IView {
    String getCity(); // 获得用户输入信息
    void showWeather(String s); //显示天气结果信息
    void clearMessage();  //清除信息
}

具体的实现在Activity中,详细代码如下:

public class MainActivity extends AppCompatActivity implements IView {

    Button mGetWeatherBtn,mClearBtn;
    EditText mCityName;
    TextView mWeatherShowText;
    Presenter mPresenter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mPresenter = new Presenter(this);

        mGetWeatherBtn = findViewById(R.id.get_weather);
        mClearBtn = findViewById(R.id.clear_weather);
        mCityName = findViewById(R.id.city_name);
        mWeatherShowText = findViewById(R.id.show_weather);

        mGetWeatherBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String city = mPresenter.getCity();
                String weather = mPresenter.getWeather(city);
                mPresenter.showWeather(weather);
            }
        });

        mClearBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                mPresenter.clearMessage();
            }
        });
    }

    @Override
    public String getCity() {
        return mCityName.getText().toString();
    }

    @Override
    public void showWeather(String s) {
        mWeatherShowText.setText(s);
    }

    @Override
    public void clearMessage() {
        mCityName.setText("");
        mWeatherShowText.setText("显示天气");
    }
}

Activity中需要获取到Presenter的对象,以此来调用model中的数据,所以presenter中需要有哪些方法,就可想而知了。

另外一下,也是我们之前说的,presenter中必须有IModel和IView的对象,用户交互,所以请看代码:

public class Presenter {

    IModel model;
    IView view;

    public Presenter(IView iView){
        this.view = iView;
        model = new ModelImp();
    }

    public String getWeather(String s){
        String weather = model.getWeather(s);
        if (weather == null){
            return "暂无该城市数据";
        } else {
            return weather;
        }
    }

    public void clearMessage(){
        view.clearMessage();
    }

    public String  getCity(){
        return view.getCity();
    }

    public void showWeather(String s){
        view.showWeather(s);
    }
}

好的,基本上就是上述了。

相关文章

  • MVP模式编程实例

    概念: M(model) : 数据,以及数据处理逻辑V(view) : 界面,及界面UI的显示,变化P(prese...

  • MVP架构

    目录 1)MVP简介2)MVP实例 1)MVP简介 MVP模式将Activity中的业务逻辑全部剥离出来,Acti...

  • 一个MVP模式的实例

    一个MVP模式的实例 在MVP模式中,P通过接口依赖 M 和 V,且 P 尽量少的依赖其他类。MVP三个角色就像三...

  • [包教包会]Android之MVP模式

    本文适用读者:已经熟练掌握Android编程但没学过MVP模式的程序员。 说起MVP模式,我也看过好多相关文章了。...

  • Android中MVP模式(一)

    1、什么是 MVP模式? 同 MVC一样,是一种编程模式和思想,是一种架构。 2、MVP和MVC。 M:M...

  • 关于MVP的个人小结

    总得来说 MVP 模式可分为五大模块: 我们先以实现一个登录界面的实例,来大致看一下MVP模式的几大模块 bean...

  • Android Studio开发快速创建MVP框架插件

    前言 关于MVP模式,通常都会利用泛型封装一下MVP的base类,通过泛型所提供的类型去实例化View层和Pres...

  • Android架构初步理解

    初步的理解记录MVC MVP MVVM分析MVP 带实例(很好,实例很好)1.MVCmodel-view-cont...

  • MVP设计模式在安卓编程中的应用

    ​大家好,这一期呢,我们来谈一下MVP设计模式在安卓编程中的应用。 Mvp就是model view present...

  • Android mvp 官方实例解析

    一 官方文档说明 概要 这个例子是很多实例变化的基础(后续还有一些实例 ),是mvp模式的简单实现,它采用依赖注入...

网友评论

      本文标题:MVP模式编程实例

      本文链接:https://www.haomeiwen.com/subject/vltsmftx.html