MVP的简单总结

原创 2018年04月16日 11:37:04

MVP的结构

以前做web时我们用过MVC的结构(javaBean +jsp+servlet),个人感觉android里面的MVP和那个MVC是一样的。
M:model,功能模块的实现
V :显示层,一般由activity来充当,UI相关的一下操作
P:presenter专注于你的业务逻辑,model层方法的调用,返回结果给V层显示。

三者的关系

1、P层起到桥梁的作用,他持有V层和M层的引用。
2、V层和P层相互持有对方的引用

V层:

    PresenterDeviceManager presenterDeviceManager;

    @Override
    public int getLayoutId() {
        return R.layout.fragment_device;
    }

    @Override
    public void createView(LayoutInflater inflater, ViewGroup container, View parentView, Bundle savedInstanceState) {
        ButterKnife.bind(this,parentView);
    }

    @Override
    public void init(Bundle savedInstanceState) {
        // 生成P层的对象,同时把V层的引用(this)也关联到P层
        presenterDeviceManager = new PresenterDeviceManager(this);
    }

    /**
     * UI显示相关的方法
    */
    public void showToast(String msg) {
        ToastUtils.showShort(msg);
    }

P层:

public class PresenterDeviceManager{
    ModelDeviceManager modelDeviceManager;
    ViewDeviceManager viewDeviceManager;

    // 通过构造函数,V层和P层互相持有对方的引用
    public PresenterDeviceManager(ViewDeviceManager viewDeviceManager){
        this.viewDeviceManager = viewDeviceManager;
        modelDeviceManager = new ModelDeviceManager();
    }
    // 在V层被调用,然后把结果返回给V层显示
    public void saveData() {
        modelDeviceManager.saveDeviceInfo();
        viewDeviceManager.showToast("保存成功!");
    }
}

M层:

public class ModelDeviceManager  {

    @Override
    public boolean saveDeviceInfo(DeviceInfo deviceInfo) {
        boolean isOK = false;
        DeviceInfoDao deviceInfoDao = new DeviceInfoDao(MyApplication.getMyApplication());
        deviceInfoDao.createOrUpdateDevice(deviceInfo);
        return isOK;
    }

    @Override
    public DeviceInfo getDevice() {
        DeviceInfoDao deviceInfoDao = new DeviceInfoDao(MyApplication.getMyApplication());
        DeviceInfo deviceInfo = deviceInfoDao.getForOne();
        return deviceInfo;
    }
}

改进
虽然从层次上分开了,但是每一层都耦合的很紧。
下面我们通过面向接口编程的规则,把互相持有对象的引用改变成互相持有接口

V层:

public interface IViewDeviceManager {
    public void showToast(String msg);
}

public class FragmentDeviceManager extends BaseFragment implements IViewDeviceManager{
    IPresenterDeviceManager presenterDeviceManager;

    @Override
    public void createView(LayoutInflater inflater, ViewGroup container, View parentView, Bundle savedInstanceState) {
        ButterKnife.bind(this,parentView);
    }

    @Override
    public void init(Bundle savedInstanceState) {
        presenterDeviceManager = new PresenterDeviceManager(this);
        presenterDeviceManager.saveData();
    }

    @Override
    public void showToast(String msg) {
        ToastUtils.showShort(msg);
    }

    /**
     * 保存设备信息
     */
    private void saveData(){
        presenterDeviceManager.saveData();
    }
}

P层

public interface IPresenterDeviceManager {
    public void saveData();
}

public class PresenterDeviceManager implements IPresenterDeviceManager{
    IModelDeviceManager modelDeviceManager;
    IViewDeviceManager viewDeviceManager;

    public PresenterDeviceManager(IViewDeviceManager viewDeviceManager){
        this.viewDeviceManager = viewDeviceManager;
        modelDeviceManager = new ModelDeviceManager();
    }

    @Override
    public void saveData() {
        modelDeviceManager.saveDeviceInfo(deviceInfo);
        viewDeviceManager.showToast("保存成功!");
    }

M层

public interface IModelDeviceManager {
    public boolean saveDeviceInfo(DeviceInfo deviceInfo);
}
public class ModelDeviceManager implements IModelDeviceManager {

    @Override
    public boolean saveDeviceInfo(DeviceInfo deviceInfo) {
        DeviceInfoDao deviceInfoDao = new DeviceInfoDao(MyApplication.getMyApplication());
        deviceInfoDao.createOrUpdateDevice(deviceInfo);
        return true;
    }
}

最简单的方式实现一个Android的MVP

由于项目中没有使用MVP模式,而MVP模式是当前比较流行的android框架,我也就自己动手一小时来实现一个最精简的MVP。 这次我将一个activity为单元分解成为mvp,当然...
  • geonggld
  • geonggld
  • 2017-02-08 13:33:35
  • 402

超简单的MVP模式案例

在说mvp之前,先说下mvc:MVC( Model View Controller):一种将逻辑和视图分隔开来的架构设计,起源于web端。其实 Android应用的开发中本身可视为一种MVC架构。 M...
  • LiuYangQiao
  • LiuYangQiao
  • 2016-09-01 17:29:35
  • 3402

一个简单的MVP模式

MVP相信大家都不陌生,不论是程序员还是经常打游戏都会经常听到这个词,好了废话完毕,直入正题!关于安卓开发的MVP设计模式简单了解。 简介 MVP是 Model (模型) 、View(视图)、Pr...
  • hujunyan520
  • hujunyan520
  • 2016-11-29 09:28:40
  • 411

Android MVP模式简单例子实战

概要 对于mvp模式,大家都知道是由mvc演变而来的,对于MVC大家都知道 M Model(用于存放实体模型与业务逻辑) V View(存放布局...
  • qq_33048603
  • qq_33048603
  • 2016-10-15 17:59:20
  • 6671

MVP第一个小demo

MVP概念: 1.Model:业务逻辑和实体模型 2.View:View通常来说是由Activity实现的,它会包含一个Presenter的引用,View要做的就只是在每次有接口调用的...
  • rjgcszlc
  • rjgcszlc
  • 2017-02-12 20:38:06
  • 1059

MVP 简单的例子

首先提一下MVP模式是什么 :MVP 全称:Model-View-Presenter ;MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻...
  • WierZheng
  • WierZheng
  • 2017-04-18 15:38:23
  • 554

MVP模式简单讲解,通俗易懂

什么是MVP: MVP 是 MVC 的变种,其实是一种升级。要说 MVP 就要说说 MVC,在 MVC 中 Activity 其实是 View层级,但是通常在使用中 ...
  • l970859633
  • l970859633
  • 2017-05-24 15:16:59
  • 246

Android----MVP模式的理解

本篇文章基于MVP模式对mvp设计模式进行了实践,作者对mvp进行了很详细的介绍,推荐大家看看。一、MVP的理解在Android开发中,Activity和Fragment承载了太多的开发任务,它们不仅...
  • qq_23589445
  • qq_23589445
  • 2016-02-13 15:12:06
  • 754

MVP的简单理解

首先什么是MVP?MVP代表Model,View和Presenter。 View层负责处理用户事件和视图部分的展示。在Android中,它可能是Activity或者Fragment类。 Model层负...
  • u010904027
  • u010904027
  • 2016-08-26 09:40:05
  • 745

Android MVP实战——MVP在Android中的简单应用

导读:上一章我们初探了Android MVP,但是只涉及到一些概念性的东西,这一章,我们将来一起来一步步实现一个简单的MVP的Demo回顾上章我们说到如何抽离MVP的层?还记得大致的步骤么? 创建实体...
  • bsince
  • bsince
  • 2015-08-12 16:02:09
  • 1274
收藏助手
不良信息举报
您举报文章:MVP的简单总结
举报原因:
原因补充:

(最多只允许输入30个字)