首页 > 其他分享 >安卓设计模式演变之经典三层模型(MVC/MVP/MVVM)

安卓设计模式演变之经典三层模型(MVC/MVP/MVVM)

时间:2022-11-29 18:36:00浏览次数:61  
标签:MVP MVVM int 代码 Presenter Model 设计模式 public View


转载请标明出处!

先看代码demo再回看文章效果最佳!

目录

​​一 mvc​​

​​1.1 概述​​

​​1.2 作用流程​​

​​1.3 现状​​

​​1.4致命弱点/缺点:​​

​​1.5 代码Demo​​

​​二   mvp​​

​​2.1 概述​​

​​2.2 作用流程​​

​​2.3 优点​​

​​2.4 代码Demo​​

​​三   mvvm​​

​​3.1 概述​​

​​3.2 操作步骤​​

​​3.3 注意点​​

​​3.4 缺点​​

​​3.4 代码demo​​


一 mvc

1.1 概述

安卓设计模式演变之经典三层模型(MVC/MVP/MVVM)_mvc

         

安卓设计模式演变之经典三层模型(MVC/MVP/MVVM)_android_02

1.2 作用流程

       从view开始,接收到用户的操作,从而交给Controller(Activity),在其处理完它的逻辑后,得到结果同步到Model,再去刷新UI界面。

1.3 现状

      Controller(Activity)既要执行View层的职能,又要执行Model层职能,违反了面向对象设计原则之一:单一职责原则。

1.4致命弱点/缺点:

      与model和view最关联的activity,它是否能干净地销毁是评估内存泄露最关键的点。

      MVC中,activity作为C,对View和Model中间的交互非常多,导致它很容易出现内存泄露。

1.5 代码Demo

      网址:​​https://github.com/LucasXu01/AndroidDemo/tree/master/NetEase_MVC​


二   mvp

2.1 概述

安卓设计模式演变之经典三层模型(MVC/MVP/MVVM)_设计模式_03

     

安卓设计模式演变之经典三层模型(MVC/MVP/MVVM)_mvvm_04

     

安卓设计模式演变之经典三层模型(MVC/MVP/MVVM)_android_05

2.2 作用流程

  • Activity作为View层,接收用户操作后交给Presenter处理;
  • Presenter可能自己处理(Google Sample),也可能交给Model处理(现实中常用);
  • 最后Presenter收到通知(网络请求结束/异步结束...),再由Presenter去刷新View;

2.3 优点

  • 解耦View和Model:如上第三图,修改业务逻辑 找Presenter层;修改页面找View层;
  • 所有的逻辑交互(V和M的交互)放在Presenter层;
  • 分层较为严谨;

2.4 代码Demo

      网址:​​https://github.com/LucasXu01/AndroidDemo/tree/master/NetEase_MVP_02​


三   mvvm

3.1 概述

安卓设计模式演变之经典三层模型(MVC/MVP/MVVM)_android_06

mvvm或者mvc/mvp是设计思想,DataBinding是一个工具。

m: Model   

v:View   

vm:ViewModel

Model中数据的改变会直接影响到View中的展示,反之一样;这个时候ViewModel主要针对业务逻辑,不可缺失;

View层和ViewModel层粘合度较高,因为它通过ViewModel获取Model层数据(这是MVVM的思想,DataBinding不存在这个问题);

3.2 操作步骤

1 在android工程的build.gradle中添加依赖

// 添加DataBinding依赖
dataBinding{
enabled = true
}

2 建立一个简单的model(javabean);

3 在布局文件中,最外层用<layout标签包裹起来,并在开头配置data->variable信息;

4 具体填充显示的内容需要用到data->variable->name标识.成员属性

安卓设计模式演变之经典三层模型(MVC/MVP/MVVM)_mvvm_07

3.3 注意点

1 在activity中必须先ReBuilder,然后再书写代码绑定;

2  切记:javabean中被观察的属性必须是public修饰符,因为是DataBinding的规范;

3 不要既用mvp有用mvvm,没人这样写,不要去这么写;

4 再次强调mvvm是业务思想,DadaBinding是实现思想的重要工具,我们可以把业务写在vm中;

3.4 缺点

内存消耗非常大!

3.4 代码demo

      demo中有几个注意的地方:

     1 双向绑定:mvvm中数据和视图的双向绑定。正向:View层接收到用户的输入,改变Model层的javabean属性;逆向:View层接收到用户的输入,改变Model层的javabean属性;如下:

public TextWatcher pwdInputListener = new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {

}

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// View层接收到用户的输入,改变Model层的javabean属性
userInfo.pwd.set(String.valueOf(s));
}

@Override
public void afterTextChanged(Editable s) {

}
};

public View.OnClickListener loginClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
// 模拟网络请求
new Thread(new Runnable() {
@Override
public void run() {
// Model层属性的变更,改变View层的显示
userInfo.name.set("Lucas");

//这边可以写业务逻辑

}
}).start();
}
};

2 在实际项目中,具体的业务逻辑可以写在vm中,如上代码注释中所示。

网址:​​https://github.com/LucasXu01/AndroidDemo/tree/master/NetEase_MVVM​

 

标签:MVP,MVVM,int,代码,Presenter,Model,设计模式,public,View
From: https://blog.51cto.com/u_12853553/5896512

相关文章

  • MVVM教程(一):MVVM简介与准备工作
    如果你对MVVM的概念还是不了解,可以参看下面链接:​​​http://baike.baidu.com/view/3507915.htm​​我们以WPF+MVVM的本地桌面程序为背景,这样一来我们可以不去操心服务器那......
  • WPF_MVVM框架(5)
    1.NuGet引用MVVM框架包引入该框架包之后,默认会在目录下创建ViewModel层的示例代码2.第二步,通过在MainViewModel中创建一些业务代码,将其与MainWindow.xaml通过......
  • 设计模式在实际开发中的应用
    我相信有些人学了设计模式,依然不知道设计模式的应用场景,感觉我们日常开发中,仅仅写些逻辑,调下接口,连接下数据库就完事儿了。感觉设计模式都被框架运用的淋淋尽致,似乎没有我们......
  • 谈谈我工作中的23个设计模式
    作者:闵大为(天未)序从基础的角度看,设计模式是研究类本身或者类与类之间的协作模式,是进行抽象归纳的一个很好的速成思路。后面阅读设计模式后,为了加深理解,对相关图片进行......
  • 大数据架构设计模式主要考虑八方面问题
    ​在架构设计中,没有万能的软件架构能解决所有问题,不同的场景、需求、限制下需要有针对性的架构模式才能满足项目需求。大数据架构设计模式中,需要从分层、分割、分布式、集群......
  • 大数据架构设计模式主要考虑八方面问题
     在架构设计中,没有万能的软件架构能解决所有问题,不同的场景、需求、限制下需要有针对性的架构模式才能满足项目需求。大数据架构设计模式中,需要从分层、分割、分布式、集......
  • 【JS】165-JavaScript设计模式——工厂模式
    二、工厂模式(FactoryPattern)1.概念介绍工厂模式的目的在于创建对象,实现下列目标:可重复执行,来创建相似对象;当编译时位置具体类型(类)时,为调用者提供一种创建对象的接口;通过......
  • 【JS】164-JavaScript设计模式——单体模式
    一、单体模式(SingletonPattern)1.概念介绍单体模式(SingletonPattern)的思想在于保证一个特定类仅有一个实例,即不管使用这个类创建多少个新对象,都会得到与第一次创建的对......
  • Selenium4+Python3系列(十) - Page Object设计模式
    前言PageObject(PO)模式,是Selenium实战中最为流行,并且被自动化测试同学所熟悉和推崇的一种设计模式之一。在设计测试时,把页面元素定位和元素操作方法按照页面抽象出来,分离成......
  • 设计模式之命令模式
    概述在软件开发中,经常需要向某些对象发送请求(调用其中的某个或某些方法),但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个,此时,特别希望能够以一种松耦合的方式来设......