设计模式之单一职责原则(iOS开发,代码用Objective-C展示)
单一职责原则:就一个类而言,应该只有一个引起它变化的原因。
在iOS开发中,我们会很自然的给一个类添加各种各样的功能,比如随便写一个简单的应用程序,一般都会生成一个viewController类,于是我们将各种各样的代码,商业运算的算法、http请求的参数(params)封装、使用FMDB、coreData时的数据库访问语句都放在这个类里面,这就意味着,无论任何需求变化,都要来修改viewController这个类,这其实是很糟糕的,维护麻烦、复用不可能、缺乏灵活性。
也许上面说的略微夸张,因为只要是稍微有iOS开发经验的朋友都知道,在iOS开发中,是采用MVC模式的,数据处理、封装放入model中,视图展示、操作放入view中,而controller只是负责将model提供的数据展示到view上去。从而保证各个模块各自独立、分工明确,容易维护。
但仅仅只是这样还不够,像发起http请求的代码、各种逻辑业务的代码、使用数据库做离线缓存的代码,与view\model无关,难道就全部放在controller里面?如果这样做,那controller里面代码将非常多,且杂乱。
就比如说,实现一个iphone上的俄罗斯方块游戏(请勿完全参照图片):
- 方块形状有不同的种类,需要代码生成
- 各方块在下落的时候,应该是通过动画下落,左右平移也应该是通过动画,并且还需要控制每次下落一格的时间,随着时间的推移(玩家等级的提高),格子单位时间下落的行数是不同的
- 在什么时间碰触到底部的方块?碰触到了该怎样停止运动?停止运动后,该不该消除这一行?等
如果将上面提到的这些全部写在一个viewController里面,这是非常不合理的,代码复用性也很差。
所以需要将之分离出来,上面提到的三点,1和3是和游戏逻辑相关的,和界面控制以及如何展示并没有多大联系,为什么要写到ViewController里面?正确的关系应该是这样的,用一个类来生成不同种类的方块,一个类来控制方块的动画,一个类来控制方块的平移、碰撞等操作。这样就可以就各个与界面逻辑无关的业务逻辑抽出来,将来如果要维护,只需要找到对应的类的功能区修改即可,而不需要改动viewController里面的东西。
如果一个类的职责过多,就等于把这些职责耦合在一起了,一个职责的变化可能会抑制或者削弱这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当变化发生时,设计会遭受意想不到的破坏。
软件设计要做的许多内容就是发现职责,并把那些职责相互分离。其实要去判断是否能分离出类来,也不难,如果可以想到多于一个动机去改变一个类,那么这个类就具有多于一个的职能,这个时候就该考虑职责分离。总的来说,在编程过程中,我们要在类的职责上多思考,做到单一职责,这样的代码才是易维护、易扩展、易复用、灵活多样的。
设计模式之单一职责原则(iOS开发,代码用Objective-C展示)的更多相关文章
- 北风设计模式课程---单一职责原则(Single Responsibility Principle)
北风设计模式课程---单一职责原则(Single Responsibility Principle) 一.总结 一句话总结: 一个类应该有且只有一个变化的原因:单一职责原则(SRP:Single Re ...
- 深入浅出系列第一篇(设计模式之单一职责原则)——从纯小白到Java开发的坎坷经历
各位看官大大们,晚上好.好久不见,我想死你们了... 先说说写这个系列文章的背景: 工作了这么久了,每天都忙着写业务,好久没有好好静下心来好好总结总结了.正好这段时间公司组织设计模式的分享分,所以我才 ...
- 设计模式之单一职责原则(SRP)
自己之前写过一些关于设计模式的博客,但是大部分都写得比较匆忙.现在正好趁年前有时间,笔者打算好好地整理一下自己这块知识结构.开篇的第一个原则就是设计原则里面最简单的一个原则--单一职责原则. 想必大家 ...
- 【设计模式】单一职责原则(SRP)
单一职责原则是面向对象原则五大原则中最简单,也是最重要的一个原则, 他的字面定义如下: 单一职责原则(Single Responsibility Principle, SRP): 一个类只负责一个功能 ...
- JAVA设计模式之单一职责原则
概念: 就一个类而言应该只有一个因其他变化的原因. 流程: 问题由来:设类或接口类C负责两个不同不同的职责:职责T1,职责T2.当由于职责T1需求改变进而需要修改类C时,可能导致职责T2收到不可预知的 ...
- 《javascript设计模式与开发实践》--- (单一职责原则)
看的这本书叫<JavaScript设计模式与开发实践> 先规划一下看书的顺序,基础知识我已经大概的浏览了一遍了,没有留下笔记,以后有时间还会补上.本来打算顺着看的.但是我感觉我很难短时间内 ...
- IOS设计模式的六大设计原则之单一职责原则(SRP,Single Responsibility Principle)
定义 就一个类而言,应该仅有一个引起它变化的原因. 定义解读 这是六大原则中最简单的一种,通俗点说,就是不存在多个原因使得一个类发生变化,也就是一个类只负责一种职责的工作. 优点 类的复杂度降低,一个 ...
- Java设计模式(2:单一职责原则和依赖倒置原则详解)
一.单一职责原则 不要存在多于一个导致类变更的原因.简单来说,就是一个Class/Interface/Method只负责一项职责. 这句话最为重要的就是这一段:一个Class/Interface/Me ...
- 敏捷软件开发:原则、模式与实践——第8章 SRP:单一职责原则
第8章 SRP:单一职责原则 一个类应该只有一个发生变化的原因. 8.1 定义职责 在SRP中我们把职责定义为变化的原因.如果你想到多于一个的动机去改变一个类,那么这个类就具有多于一个的职责.同时,我 ...
随机推荐
- 如果没有 Android 世界会是什么样子?
2005年谷歌从安迪·鲁宾(Andy Rubin)手中收购Android系统,起初安迪·鲁宾(Andy Rubin)只是想为数码相机开发出一个更为先进的系统,所以有了 Android.但是智能手机行业 ...
- 【Hibernate】hibernate框架的搭建
1, Hibernate 是什么 Hibernate是java应用程序与数据库交互的开发的框架. Hibernate是一个开源,轻量级的ORM(对象关系映射)工具. 2,Hibernate框架的优点 ...
- 【java】详解java多线程
目录结构: contents structure [+] 线程的创建与启动 继承Thread类创建线程类 实现Runnable接口创建线程类 使用Callable和Future创建线程 线程的生命周期 ...
- Linux安装ElasticSearch-2.2.0-分词器插件(IK)
1.在gitpub上搜索elasticsearch-analysis,能够看到所有elasticsearch的分词器: 2.安装IK分词器:https://github.com/medcl/elast ...
- Linux引导启动程序 - boot
主要描述 boot/目录中的三个汇编代码文件,见列表 3-1 所示.正如在前一章中提到的,这三个 文件虽然都是汇编程序,但却使用了两种语法格式.bootsect.s 和 setup.s 采用近似于 I ...
- git clone 问题 fatal: unable to access
git clone 遇到问题 Cloning into 'warp-ctc'...fatal: unable to access 'https://github.com/SeanNaren/warp- ...
- iOS常用RGB颜色的色值表
常用RGB颜色表 R G B 值 R G B 值 R G B 值 黑色 0 0 0 #000000 黄色 255 255 0 #FFFF00 浅灰蓝色 176 224 230 #B0E0E6 象牙黑 ...
- 稀疏傅里叶变换(sparse FFT)
作者:桂. 时间:2018-01-06 14:00:25 链接:http://www.cnblogs.com/xingshansi/p/8214122.html 前言 对于数字接收来讲,射频域随着带 ...
- CentOS SVN强制用户提交时写日志
问题:在项目提交时候不写日志,在后期查看修改历史时需要对比版本才知道提交原因.解决方案:在svn服务端通过hooks在提交时强制要求写日志.#!/bin/shREPOS="$1"T ...
- vim7.4版本在windows下的配置文件及所在位置
1.vim在windows下默认首先会查找"_vimrc"文件,如果没有则会找".vimrc".造成这个原因是windows早期不支持以点开头的文件及目录.2. ...