java mvc mvp_MVC和MVP设计模式

参考博客

http://www.cnblogs.com/end/archive/2011/06/02/2068512.html

####MVC模式

M:model 模型

V:view视图

C:controller控制器

>我们知道,所有的软件的构成主要有两部分,分别是用户交互入口(USER INTERFACE)和数据(DATA)。那么为什么UI(USER INTERFACE)称为用户交互入口呢?因为我们的用户,在使用我们的软件的时候,他们关心的并不是使用了什么技术实现的,考虑更多的是这个功能好不好用,这个交互舒服不舒服。那么用户在通过视觉和通过操作使用我们软件的时候,接触用户的就是我们的界面,承载交互的就是我们界面上的控件。所以,UI称之为用户交互入口,因为有了视觉体验有了感知,才会有行为,有了行为才能称之为交互。用户的行为,也就是交互,我们就是C(CONTROLLER)在处理,那么呈现在UI(USER INTERFACE)上面的内容,就是我们的数据,所以我们的M(MODEL)就是MVC中的数据模型。

在我们的android开发过程中,本质上并没有完全遵循MVC架构模式。以Activity为例:

它可以是V也可以使C。因为Activity能兼容了View和Controller的基本特征。那么,在Android中,MVC在哪些场景下体现的比较准确呢?以列表级控件的使用为例(ListView,GridView):我们需要声明ListView这个外层容器,然后定义Item的UI样式,然后通过适配器将UI和数据进行匹配,最后将适配器和控件进行绑定。那么这个就是我们MVC软件架构模型的一个很清晰的体现,在列表级控件中,我们使用了Adapter,在设计模式中,称之为适配器模式。所以在这个小例子中,就要体会一下软件架构模型和设计模式的区别。

![](http://images2015.cnblogs.com/blog/1061881/201705/1061881-20170502204735961-1299977060.png)

####MVP模式

M:model 模型

V:view 视图

P:presenter 中间人

>MVP作为MVC的演化进阶模型。它的灵活性以及优势主要体现在复杂的业务场景下。首先MVP中的M(MODEL)可以承载交互扮演MVC中C(CONTROLLER)的角色,也可以扮演MVC中M(MODEL)的角色,可以进行数据建模也可以进行视图建模。MVP中V(VIEW)属于单纯意义上的视图层。P(PRESENTER)则作为中间人亦或者桥梁,将M和V进行关联。同时MVP中的P(PRESENTER)也可以作为业务实现层体现在项目中。

![](http://images2015.cnblogs.com/blog/1061881/201705/1061881-20170502205017898-423547242.png)

>所以,综上,MVP相比较MVC我们发现,它的灵活性更高了,并且,拆解效率非常明显。总结一句话就是,MVP在复杂业务背景下,解耦和扩展效果突出。

MVP 的缺点:model 层与 Presenter 层,presenter层与 view 层之间通过接口建立联系,这样会导致当页面逻辑很复杂的时候,View 层实现的接口会很多,如果你的App中有很多复杂的页面,维护接口的成本会变的很大。

#### MVVM 模式

MVVM 模式将 Presenter 改名为 ViewModel,基本与MVP模式一致

区别在于 View 层与 ViewModel 层通过 DataBinding相互绑定。View层的变动,自动反应在 ViewModel 层,反之亦然

### Dagger2在MVP中所发挥的作用

Dagger2是为Android和Java平台提供的编译时进行依赖注入的框架,编译时生成代码,完成所需对象的注入,解决了基于反射带来的开发和性能上的问题。主要是用于界面和业务之间的隔离

使用步骤:

>0.添加依赖

>0.借助工具生成编译注解器(在gradle中进行配置),在编译时起作用

>1.指定要注入的目标(@inject)

>2.创建dagger文件,创建module类(@module,@presenter)

>3.通过接口建立Activity和Module之间的关系(@component)

>4.rebuild 编译生成代码

>5.使用那个类

![](http://images2015.cnblogs.com/blog/1061881/201704/1061881-20170425231236537-2061171856.png)

![](http://images2015.cnblogs.com/blog/1061881/201705/1061881-20170502205419961-1042417469.png)

>“可参考的博客:http://blog.csdn.net/tiankong1206/article/details/46486401”

### Retrofit

利用注解和okHttp实现和服务器的数据交互

用法

0.添加依赖并进行配置

1.创建model数据模型

2.定义REST API接口

3.创建Retrofit对象并发起请求

### RxJava

本质是一个在java VM 上使用可观测序列的基于事件程序的异步操作库,使用简洁的逻辑处理复杂的任务的一个异步操作库。

可以轻松处理不同环境下的后台线程和UI线程库

关键字:简洁,异步,队列化

![](http://images2015.cnblogs.com/blog/1061881/201705/1061881-20170502221056179-1270622283.png)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/574376.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python浅拷贝深拷贝

copy_listlist[:] 得到的是浅拷贝,即只能顶层拷贝,里面的嵌套不会复制一份。 a [0, [1, 2], 3] b a[:] a[0] 8 a[1][1] 9 请问现在a和b分别是多少? 答案:是 a 为 [8, [1, 9], 3],b 为 [0, [1, 9], 3]。 b的第二个…

[转载] KAFKA分布式消息系统

转载自http://blog.chinaunix.net/uid-20196318-id-2420884.html Kafka[1]是linkedin用于日志处理的分布式消息队列,linkedin的日志数据容量大,但对可靠性要求不高,其日志数据主要包括用户行为(登录、浏览、点击、分享、喜欢&…

java sleep唤醒_JAVA wait(), notify(),sleep详解(转)

在JAVA中,是没有类似于PV操作、进程互斥等相干的方法的。JAVA的进程同步是通过synchronized()来实现的,需要说明的是,JAVA的synchronized()方法类似于操作系统概念中的互斥内存块,在JAVA中的Object类型中,都是带有1个内…

ACM 错排

Description 大家常常感慨,要做好一件事情真的不容易,确实,失败比成功容易多了! 做好“一件”事情尚且不易,若想永远成功而总从不失败,那更是难上加难了,就像花钱总是比挣钱容易的道理一样。 话…

Linux的NTP配置总结

在Linux系统中,为了避免主机时间因为在长时间运行下所导致的时间偏差,进行时间同步(synchronize)的工作是非常必要的。Linux系统下,一般使用ntp服务来同步不同机器的时间。NTP 是网络时间协议(Network Time Protocol)的…

mysql_real_connect阻塞_mysql_real_connect崩溃、未经处理的异常

mysql_real_connect崩溃、未经处理的异常背景近期客户测试软件,功能里有mysql连接问题,在mysql连接失败时,客户机器上出现“已停止工作”界面,而我机器上软件直接退出没有提示自动关闭。查找分析因为是一直用的代码,和…

java中settimeout作用_关于setTimeout的妙用

定义在指定的延迟时间之后调用一个函数或执行一个代码片段这个是setTimeout最主要的功能,但也是很坑的地方,首先javascript其实是运行在单线程的环境下,意味者定时器会在未来的某个时间支持,但是具体的执行的时间并不能够很准确的…

中兴的一道笔试题

今天做了中兴的秋招题目,有一个题以前没有仔细想过,题目我有点儿记不清楚了,大概意思是这样的:有一个循环的单链表,给定该链表的尾指针比给定头指针好么? 我的思路:如下图,这是一个循…

Linux read 命令

Linux read命令用于从标准输入读取数值。 read 内部命令被用来从标准输入读取单行数据。这个命令可以用来读取键盘输入,当使用重定向的时候,可以读取文件中的一行数据。 语法 read [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] […

放图片 java_java怎么在我想要的图片上在放一个我想要的图片

展开全部import javax.imageio.*;import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.awt.geom.*;import java.io.*;import java.util.*;/*** author Hardneedl*/final class PicDemo extends JFrame {public String getTitle() {return "PicDe…

Ext-ajax请求数据

Ext.Ajax.request({url: webPath/news/newsEastmoneyList,method: POST,success: function (response, options) {var data Ext.decode(response.responseText);if(data.success){list.getStore().load({page:1});Ext.Msg.alert(提示,提取成功,共提取data.zg条.);}…

java .net des_DES加密解密 JAVA与.NET互通程序代码

JAVA版本import javax.crypto.Cipher;import javax.crypto.SecretKey;import javax.crypto.SecretKeyFactory;import javax.crypto.spec.DESKeySpec;import javax.crypto.spec.IvParameterSpec;public class Des {private byte[] desKey;//解密数据public static String decryp…

linux 查找文件或者服务

[rootlocalhost ~]# whereis mysql mysql: /usr/bin/mysql /usr/lib/mysql /usr/share/mysql /usr/share/man/man1/mysql.1.gz [rootlocalhost ~]# which mysql /usr/bin/mysql转载于:https://www.cnblogs.com/adolfmc/p/4749224.html

android java 调用js_android WebApp 集成方式怎么使用java调用js

WebAPP集成,本地打包,有两种方式java js通信1.DCloud插件模式,参考SDK DEMO的H5Plugin,Java:继承StandardFeature写接口。public class DBControlPlugin extends StandardFeature{public void PluginTestFunction(IWebview pWebvi…

Android SurfaceView实现静态于动态画图效果

本文是基于Android的SurfaceView的动态画图效果,实现静态和动态下的正弦波画图,可作为自己做图的简单参考,废话不多说,先上图, 静态效果: 动态效果: 比较简单,代码注释的也比较详细&…

java ip调天气预报接口_JAVA + WeatherWebService 实现天气预报接口调取

两步完成接口调取第一步:引入jar包若在线jar包失效,私信我即可。第二步:创建类实现在JAVA项目中创建java类(我的是:WeatherUtil)修改类中cityid为你需要展示的地区id,我的是上海的【cityid查询】WeatherUtil类代码:imp…

数学概念——J - 数论,质因数分解

J - 数论,质因数分解Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit StatusDescription Tomorrow is contest day, Are you all ready? We have been training for 45 days, and all guys must be tired.But , you are…

java map集合排序的_Java对Map集合进行排序

Java对Map集合进行排序实现 Comparator 接口,重写compare方法,完成自定义排序int compare(Object o1, Object o2) 返回一个基本类型的整型如果要按照升序排序,则o1 小于o2,返回-1(负数),相等返回0,01大于02返回1(正数)…

java黄金分割点游戏_结对编程1——黄金点小游戏项目简介及需求分析

一、项目成员2018141461085龚泽楠2018141461012蔡铧荣二、项目名称黄金点小游戏三、项目简介游戏规则: N个同学( N通常大于 10 ),每人写一个 0~100 之间的有理数 (不包括 0或100) ,交给裁判算出所有数字的平均值然后乘以 0.618 (所谓黄金分割…

STL泛型算法总结

泛型算法只是依赖于迭代器的操作,而不是依赖于容器 泛型算法可以分为3大类: 下面的vec和vec2代表相同类型的容器 1.只读算法:只允许读取其输入范围内的元素,而不改变元素 find(vec.cbegin(),vec.cend(),k) 查找算法:前…