在软件开发中一般认为有23种设计模式(design pattern),这是软件开发中的较高的境界了。在iOS开发中最常用的有哪些设计模式呢?我们今天来分析一下:

一.【代理模式】

使用场景:当一个类的某些功能需要由别的类来实现,但是又不确定具体会是哪个类实现。其实就像是Java中的接口,类可以实现或者不实现协议(接口)中的方法。

优点:低耦合。

使用原则:开闭原则。

实例:TableView的UITableViewDataSource、UITableViewDelegate,通过和protocol的配合,完成代理。

二.【观察者模式】

使用场景:一般是对model层进行观察,Controller和View进行通知的方式,只负责发送消息,不关系谁去接收。一个对象状态改变,通知正在对他进行观察的对象,这些对象根据各自的要求做出响应。

优点:低耦合。

使用原则:接口隔离原则,开闭原则。

实例:KVO键值观察者。通知机制。

三.【MVC模式】

使用场景:整个iOS App系统架构就应该按照MVC模式。

优点:层次清晰、易于维护。

实例:model进行数据的存储,View进行视图的显示和响应,controller是model和view之间的桥梁,进行逻辑控制。

四.【单例模式】

使用场景:确保程序运行时只有一个实例,用于进行资源共享控制。

优点:逻辑简单。

原则:单一职责。

实例:

(1)UIAccelerometer类和sharedAccelerometer方法,一般如果方法名中有shared这样的词,就可以认为这是一个可以整个应用程序共享的实例变量,一般是使用了单例。

(2)UIApplication类和sharedApplication方法,我们一般使用该方法来创建全局变量。

(3)NSBundle类和mainBundle方法。

(4)NSFileManager类和defaultManager方法。

(5)NSNotificationCenter类和defaultManager方法。其中NSNotificationCenter也实现了观察者模式。

(6)NSUserDefaults类和defaultUser方法。

五.【策略模式】

使用场景:定义算法族,进行封装,使他们之间可以相互替换。

优点:使算法的变化独立于使用算法的用户。

原则:针对接口编程,而不是针对实现编程。

实例:排序算法,NSArray的sortedArrayUsingSelector

六.【工厂模式】

使用场景:工厂方法创建类的实例,多于proxy模式配合,创建可替换代理类。

优点:易于替换,面向抽象编程,application只和抽象工厂的共性抽象类发生调用关系。

原则:依赖倒置原则。

实例:项目部署环境中依赖多个不同类型的数据库时,需要使用工厂配合proxy完成易用性替换。

总结,在实际的开发中,上述的模式用的最常见,如果以后用到其他的,我会继续和大家分享。

github主页:https://github.com/chenyufeng1991  。欢迎大家访问!

iOS开发设计模式详解相关推荐

  1. 苹果iOS开发系列--详解Swift 3.0语言的重大变化

    概述 从写第一篇Swift文章的时候到现在Swift已经从1.2发展到了今天的3.0,这期间由于Swift目前还在发展阶段并不能向下兼容,因此第一篇文章中的部分代码在当前的Xcode环境中已经无法运行 ...

  2. iOS开发-Runtime详解(简书)

    简介 Runtime 又叫运行时,是一套底层的 C 语言 API,其为 iOS 内部的核心之一,我们平时编写的 OC 代码,底层都是基于它来实现的.比如: [receiver message]; // ...

  3. iOS开发之详解正则表达式

    本文由Charles翻自raywenderlich 原文:NSRegularExpression Tutorial: Getting Started 更新提示:本教程被James Frost更新到了i ...

  4. iOS开发- UICollectionView详解+实例

    本章通过先总体介绍UICollectionView及其常用方法,再结合一个实例,了解如何使用UICollectionView. UICollectionView 和 UICollectionViewC ...

  5. iOS开发CAAnimation详解

    Core Animation,即为核心动画,它是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍.也就是说,使用少量的代码就可以实现非常强大的功能.Core Anima ...

  6. iOS开发之详解连连支付集成

    "最近由于公司项目需要集成连连支付,文档写的不是很清楚,遇到了一些坑,因此记录一下,希望能帮到有需要的人." 前面简单的集成没有遇到什么坑,在此整理一下官方的集成文档,具体步骤如下 ...

  7. iOS开发——Handoff详解

    iOS8推出一个新特性,叫做Handoff.Handoff中文含义为换手(把接力棒传给下一个人),可以在一台Mac和iOS设备上开始工作,中途将工作交换到另一个Mac或iOS设备中进行.这个在iOS8 ...

  8. iOS中MVC等设计模式详解

    iOS中MVC等设计模式详解 在iOS编程,利用设计模式可以大大提高你的开发效率,虽然在编写代码之初你需要花费较大时间把各种业务逻辑封装起来.(事实证明这是值得的!) 模型-视图-控制器(MVC)设计 ...

  9. iOS 7 iPhone iPad应用开发技术详解

    2019独角兽企业重金招聘Python工程师标准>>> iOS 7 iPhone iPad应用开发技术详解 本书内容全面,从 Objective-C语法知识.iOS功能特 性,到高级 ...

最新文章

  1. Python实战 | 送亲戚,送长辈,月饼可视化大屏来帮忙!
  2. 初学者必学的C++项目!花3天搞定
  3. Magic Leap 2实测出炉:视场角增大20度,重量减轻20%,透光率低至0.3%让AR特效更逼真...
  4. 杂谈--DML触发器学习
  5. window wamp中配置安装xhprof步骤(windows)
  6. android php mysql json 查询_使用json从PHP-MySql服务器到Android获取图像
  7. 【CodeForces - 735A 】Ostap and Grasshopper (水题,模拟)
  8. 格兰杰因果关系检验r语言_R语言系列第四期:R语言单样本双样本差异性检验
  9. oracle如何判断奇数偶数_堆垒素数论之旅(1):奇数哥德巴赫猜想
  10. zabbix 安装(yum)
  11. antd权限管理_Ant Design Pro开发后台管理系统(权限)-阿里云开发者社区
  12. Python3异常-AttributeError: module 'sys' has no attribute 'setdefaultencoding'
  13. 比特币工作量证明,“法外之地”的法
  14. python语言是 创造的_1.python简介
  15. HTML5+CSS期末大作业:环保网站设计——环境保护(10页) 含设计报告 HTML+CSS+JavaScript 静态HTML环境保护网页制作下载 DIV+CSS环保网页设计代码...
  16. 一种用于指导模拟 IC 布局的定制图神经网络模型
  17. 手机银行告别“鸡肋”
  18. 湖南科技大学c语言上机题库,2018年湖南科技大学计算机科学与工程院824C语言程序设计与数据结构综合之C程序设计考研核心题库...
  19. 思科交换机等设备基本配置
  20. 基于hadoop下的使用map reduce分布式系统的高考高频词汇统计

热门文章

  1. python分三行将你的学号姓名班级_python第三次作业——叶耀宗
  2. Java中将String类型依照某个字符分割成数组
  3. chrome弹出2345网址导航删除方法之一
  4. 透过历史迷雾进行深入探究特斯拉线圈是如何工作的?
  5. (八)《跟我一起写Makefile》之使用函数
  6. 【ROM制作工具】合并分割system.img和userdata.img文件修改教程
  7. 高德POI采集方法与大数据分析
  8. 企业业务的 WPA3 安全性为啥如此重要?
  9. 【Camera】Camera基础概念
  10. 网络安全 — 零信任网络访问(ZTNA)