MVP模式在Android中的应用之图片展示选择功能的框架设计

原创 2015年11月17日 17:49:05

前言:虽然安卓出现的时间比其它平台软件比较晚,但是在我们的安卓开发中,一样可以使用我们所熟知的设计模式来给它一个合理、完善的结构,这样,才可以使我们在平常开发的时候减少冗余代码的发生,真正的提高效率。

平常,我们可能会遇到这样的需求:在一个页面中用来展示图片或者文字(我们称之为"大湿胸"),而另一个页面除了和大湿胸长得一模一样之外,它还有一个功能是选择(我们称之为"二湿弟"),遇到这种情况你会怎么做呢?当类似于这样的情况在你的APP中有很多种怎么办呢?你会怎么选择?是一遍遍的拷贝粘贴,还是先静下来想想如何设计它呢?


好,如果你选择的是第一种,可能下面的话就有些不太适合你了,可以直接关闭了。

如果你选择的是第二种,请跟我来,我们一起来看看这个功能该如何设计。

先来一张设计概要UML图(高清大图请移步:http://download.csdn.net/detail/u011064099/9277071):

这张图的所展现出的设计使用了MVP模式,即IView为我们的View,AbstIData为我们的Model,Presenter则是Presenter。对于怎么使用它们,这篇文章对它进行了概要说明

好,我来解释一下这张图,我们看到的一整大块的蓝色是包,表示这属于同一系列的东西,从左上角开始看起,这个包被定义为界面,也就是说它只是负责界面的绘制以及响应用户的操作,AbstIData则表示我们的数据包,里面有4项实现类,表示从4中不同的渠道获取数据。我们的核心则是Presenter,它里面定义了我们数据以及界面的组合方式。它们共同继承IConnect接口,用于相互之间的通讯。

为了符合设计原则,我们的抽象标准则放入了与我们实际功能有关的部分,它们是一一对应的:ActivityA集成了RecyclerView,则我们使用的Presenter也是与RecyclerView有关系的,所以它实现了IRecyclerView接口,这个接口中定义了RecyclerView所必须的拥有的要素,以便在实例化的时候可以从外部注入,它为RecyclerPresenter。


为了既有图片展示,又有选择功能,我们的核心所在则是左下角这一块:图片类型适配器这个类它是与图片有关操作的一个抽象类,我们可以继承它,以便可以定义很多种图片的展示效果,在图片类型适配器的内部放置了一个图片选择功能辅助类,它专门用来处理图片选择之类的问题,比如图片的选择与不选择的界面处理,以及获取被选中的结果等等,总之图片的选择功能全部由它来进行操作。它可以使用反射的方式来与适配器内部进行逻辑挂钩,比如对展示布局进行选择控件的添加等等。这里使用了桥梁模式,所以我们的选择样式就不用单独去做了,只用把它们之间的功能组合一下就可以。

中间下部的是我们平常所知道的ViewHolder,每个布局则需要去对应不同的ViewHolder,如果是遇到选择的功能,则可能ViewHolder类的个数要翻一倍了,所以这里最好是使用万能的ViewHolder。右下部分则是我们RecyclerView需要使用的LayoutManager,这里我们在组装Presenter的时候就可以直接对它进行定义。


所以对于我们的图片展示选择的这个例子来说,我们的核心部分是RecyclerPresenter,我们在定义它的子类的时候,会定义一切可自定义的东西,比如:数据来源,数据解析方式,使用什么样的适配器,使用什么样的ViewHolder,使用什么样的LayoutManager,我们需要它们里面进行精妙复杂的组合,最终提供给ActivityA去使用。

使用示例:

class 用于展示网络数据Presenter
{
	new NetData();//数据的输入来源
	new RViewAdapter(boolean 是否启动选择功能);
	new ViewHolder();//最好使用万能适配器
	new GridLayoutManager();//RecyclerView的布局方式

}

ShowListImageActivity.startInstance(mContext, SelectLocalPhotoPresenter.class);

好,整体的思路就是这样,在实现过程中还有不少需要调整的地方,请大家批评指正。欢迎多多讨论。




版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Android官方MVP架构示例项目解析

前段时间Google在Github推出了一个项目,专门展示Android引用各种各样的MVP架构,算是官方教程了。趁着还新鲜,让我们来抛砖引玉一探究竟,看看在Google眼里什么样算是好的MVP架构。...

Android MVP模式理解(附简单登录模块例子)

一、简介       M全称model,业务处理,比如请求网络数据。       V 全称view,UI显示       P全称presenter,model与view的交互   二、MVP 与MVC...

框架模式MVC与MVP在Android中的应用

很多人在开发Android项目时没有考虑过架构模式的问题,以至于随着项目的增大,Activty或者Fragment中代码也会越来越多,导致项目的维护变的越来越复杂。然而在Android中使用比较多的两...

框架模式MVC与MVP在Android中的应用

很多人在开发Android项目时没有考虑过架构模式的问题,以至于随着项目的增大,Activty或者Fragment中代码也会越来越多,导致项目的维护变的越来越复杂。然而在Android中使用比较多的两...
  • gjnm820
  • gjnm820
  • 2016年06月22日 12:10
  • 9990

MVP设计模式进行Android应用开发

前言:我们平时进行Android应用开发,是不是遇到以下问题? Activity或Fragment业务逻辑代码臃肿不堪,在复杂的业务逻辑下可阅读性差,就像拧在一起的麻绳,耦合严重。Activity或F...

基于MVP设计模式的Android应用架构设计

0前言 昨天在QQ空间看到一位IOS工程师设计的APP架构,由于对此大神比较崇拜就研究了哈IOSAPP架构,发现移动端APP开发还是有很多相同的地方。下图为IOS大神设计的APP架构图。 ...

Windows 8应用程序,系统管理模块图片展示

thickox框架,图片展示

  • 2013年05月10日 14:58
  • 1.27MB
  • 下载

Android GridView做已选图片展示效果(类似写微博写朋友圈)

查看了网络上一些仿写微博时已选图片的展示的功能,感觉都为能达到自己的需求,或者局限性太大。作为一个合格的工程师在找不到好例子的时候就应该去自己定义一个View了。 根据直观的展示方式需要的是GridV...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MVP模式在Android中的应用之图片展示选择功能的框架设计
举报原因:
原因补充:

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