位置: 编程技术 - 正文

Android与设计模式:用单一职责原则为Activity解耦(android设计模式的应用场景)

编辑:rootadmin
一、什么是单一职责原则

推荐整理分享Android与设计模式:用单一职责原则为Activity解耦(android设计模式的应用场景),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:android中的设计模式,android中的设计模式,android设计app,android中的设计模式,android设计模式与最佳实践,android设计模式书籍,android设计模式与最佳实践,android设计模式总结,内容如对您有帮助,希望把文章链接给更多的朋友!

单一职责原则(SRP:Single responsibility principle)又称单一功能原则,其定义为:一个类,应该只有一个可以导致变化的原因。光看概念会让人很头疼,我先讲点小例子吧:

二、单一职责原则能解决什么问题

回顾我们的 Android 开发经历,很多人都会发现 Activity 类中的代码总会不知不觉地变得很多,这会让读我们代码的人非常痛苦。而造成这种情况的其中一个原因是:Activity 中需要与用户进行大量的交互,用户的操作会改变 Activity 当前显示的界面元素/对应的信息,所以我们总会把 Model、View、点击事件等等……操作全都放到了 Activiy 中,但这样存在一个很严重的问题,无脑地为 Activity 添加代码,势必让 Activity 变得臃肿,结构混乱,职责模糊,特别是之前负责该项目的工程师已经离职,新入职的工程师需要重构该 Activity 时,必将痛不欲生。

那么我们要怎样为 Activity 解耦呢?我先通过一个小 Demo 以单一职责原则的思想为 Activity 解耦,详情如下:

在 Demo 里我们可以看到,所有相关的操作都在 Activity 里进行,要知道,这还只是一个非常简单的页面,可以说完全不存在业务逻辑。换成一个业务逻辑复杂的页面,这还用玩?接下来换一个思路,用 MVP 模式解耦:

Android与设计模式:用单一职责原则为Activity解耦(android设计模式的应用场景)

进行这样的重构之后,Activity 类发生了什么变化呢?我们先回想下 Android SDK 对 Activity 的定义吧:

An activity is a single, focused thing that the user can do. Almost all activities interact with the user, so the Activity class takes care of creating a window for you in which you can place your UI with {@link #setContentView}. While activities are often presented to the user as full-screen windows, they can also be used in other ways: as floating windows (via a theme with {@link android.R.attr#windowIsFloating} set) or embedded inside of another activity (using {@link ActivityGroup}).

简单翻译下:Activity 象征用户能完成的一件事,大部分 Activity 用于和用户进行交互,在其中放置我们的 UI。

也就是说,Google 官方认为 Activity 的职责是:呈现 UI,与用户交互。

那么之前的代码很显然违反了单一职责原则了,因为在 Activity 中不但要进行数据的请求和更新、根据用户的交互/更新的数据去修改 View。那么新代码让 Activity 发生了什么改变呢?第一、数据的请求/更新由 Presenter 处理,不需要经过 Activity 去请求/更新;第二、View 相关的逻辑(如:修改)由 IView 接口提供,Activity 只需要完成具体实现。

三、遵循单一职责原则有什么好处

那么进行这样的重构有什么好处呢?我相信看了示例之后,大家心里多少会有些说不清、道不明的触动,特别是回忆起过去写的一些结构糟糕的代码时触动会更深些。实际上,我个人认为设计模式中的思想和生活中高效组织、完成工作的思想都是一致的,因为所谓设计模式,本身就是前人对写代码的经验总结,其目的就在于:提高效率,便于维护,让代码易读,易拓展等等……回顾生活,我们要想让一个团队/组织/公司/企业高效运作,那么这个群体就得根据实际划分部门 —> 确立部门沟通规范 —> 部门内再次进行团队职责细分(例如 UI 部门分为:视觉设计、交互设计等等……) —> 部门成员明确分工,尽可能让整个群体结构呈现为模块化、低耦合、高内聚、职责区分清晰的结构。

而单一职责原则体现的也是这样的思想,一个类,应该只受其最根本的抽象逻辑影响,类内的具体变化都应该来自于该抽象逻辑,我们说单一职责,我认为其含义不在于一个类做一件事,而在于一个类就是一个抽象群体,抽象群体具有自身的属性和职责,它的职责可能需要它做很多事,但它的职责始终唯一。

进行这样的重构之后我们可以把类内不属于它的逻辑剥离出去,让类遵循它的抽象逻辑,而不需要为其他不属于它的职责增加代码。

Android集成讯飞SDK实现语音拨号、语音导航、语音启动应用 转载请注明出处:周木水的CSDN博客

Gallery图片浏览 原文:Gallery图片浏览源代码下载地址:

迄今最好的Http请求框架 本文原创,转载请注明链接

标签: android设计模式的应用场景

本文链接地址:https://www.jiuchutong.com/biancheng/378185.html 转载请保留说明!

上一篇:关于在Android工程中新添加了一个Activity 而程序崩溃的问题(关于android工程中的assets目录的正确说法)

下一篇:Android集成讯飞SDK实现语音拨号、语音导航、语音启动应用(讯飞src)

  • 什么是宏观税负如何判定一国宏观税负的轻重
  • 农产进项税是多少税率
  • 递延所得税资产和递延所得税负债
  • 外经证预交税怎么算
  • 不得抵扣的进项税额转出会计分录
  • 货物和运费一起开票怎么开
  • 核定征收生产经营所得税率
  • 农产品流通环节有哪些
  • 加工皮革出口能申请退税吗
  • 商业地产运营成本核算
  • 2018年收入等级划分图
  • 发票添加商品编码怎么填
  • 增值税进行未认定怎么办
  • 污泥处置中心所得税优惠政策
  • 2018年业务宣传费与广告费税前扣除标准及依据
  • 小规模应税行为扣除额计算
  • 购买房产,税费怎么计算
  • 工资先发一半
  • 待处理财产损益计入资产负债表哪里
  • 建筑业预估成本怎么算
  • 房屋装修费是否分摊到地下车位成本
  • 没票的购进能入成本吗
  • 佣金可以开票吗
  • 购进材料是进项税还是销项税
  • 一般纳税人存货入账价值
  • 违建罚款了还算违建吗
  • 如何解决Windows10电脑卡顿现象
  • 桌面小工具怎么添加
  • 公会经费缴费单位应于每月
  • wordpress用什么开发的
  • 营业税改增值税的过程
  • 货款退回账务处理方法
  • thinkphp项目怎么部署
  • 这是我见过最牛的人英语
  • 税控技术服务费280元怎么抵减申报不成功
  • 03-JavaScript基础
  • 盈余公积弥补以前亏损分录
  • 中国烟草资产负债表
  • 企业所得税资产总额平均值怎么算
  • 多交增值税可以做营业外支出吗
  • 支付给外单位人员的报酬怎么入账
  • 免征增值税的项目可以开专票吗
  • 有哪些业务可以和公交公司合作的
  • 支付航天信息服务费未收到发票怎么处理
  • 预付房租如何做分录
  • 跨年取得的费用票怎么做账
  • 外币转入账户什么意思
  • 公司对公账户没钱了辞退员工
  • 非现金资产抵偿债务
  • 增值税年末结转的会计处理
  • 车辆购置税的税目有哪些
  • 注册公司认缴和实缴的风险区别
  • sql触发器语句
  • mysql数据库随机取数据
  • 清空表内数据语句
  • win8 net framework
  • win7 重装系统
  • 电脑重装系统步奏
  • 打开本地搜索
  • linux如何设置用户自己的工作环境
  • 工商网银登陆
  • Win10系统如何打开任务管理器
  • 开始菜单里没有设置选项
  • 在linux操作系统中,/etc/rc.d/init.d
  • Javascript之Number对象介绍
  • alt用不了
  • 常用的批处理命令
  • python的判断语句
  • c#7.0新语法
  • 如何用虚拟号码打电话
  • java使用jni
  • 移动move命令的操作步骤是
  • jquery.ztree中文api
  • Javascript字符串出现次数
  • python如何搭建环境
  • python的入门教程
  • js中如何在div里写入内容
  • 增值税发票打印时号码不一致怎么办
  • 北京税务查验中心官网
  • 食堂增值服务有哪些
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设