ios开发学习中,经常弄不清楚ios的开发模式,今天我们就来进行简单的总结和探讨~
(一)代理模式

应用场景:当一个类的某些功能需要由别的类来实现,但是又不确定具体会是哪个类实现。
优势:解耦合
敏捷原则:开放-封闭原则
实例:tableview的 数据源delegate,通过和protocol的配合,完成委托诉求。
列表row个数delegate
自定义的delegate

(二)观察者模式

应用场景:一般为model层对,controller和view进行的通知方式,不关心谁去接收,只负责发布信息。
优势:解耦合
敏捷原则:接口隔离原则,开放-封闭原则
实例:Notification通知中心,注册通知中心,任何位置可以发送消息,注册观察者的对象可以接收。
kvo,键值对改变通知的观察者。

(三)MVC模式

应用场景:非常古老的设计模式,通过数据模型,控制器逻辑,视图展示将应用程序进行逻辑划分。
优势:使系统,层次清晰,职责分明,易于维护
敏捷原则:对扩展开放-对修改封闭
实例:model-即数据模型,view-视图展示,controller进行UI展现和数据交互的逻辑控制。

(四)单例模式

应用场景:确保程序运行期某个类,只有一份实例,用于进行资源共享控制。
优势:使用简单,延时求值,易于跨模块
敏捷原则:单一职责原则
实例:[UIApplication sharedApplication]。
注意事项:确保使用者只能通过 getInstance方法才能获得,单例类的唯一实例。
java,C++中使其没有公有构造函数,私有化并覆盖其构造函数。
object c中,重写allocWithZone方法,保证即使用户用 alloc方法直接创建单例类的实例,
返回的也只是此单例类的唯一静态变量。

(五)策略模式

应用场景:定义算法族,封装起来,使他们之间可以相互替换。
优势:使算法的变化独立于使用算法的用户
敏捷原则:接口隔离原则;多用组合,少用继承;针对接口编程,而非实现。
实例:排序算法,NSArray的sortedArrayUsingSelector;经典的鸭子会叫,会飞案例。
注意事项:1,剥离类中易于变化的行为,通过组合的方式嵌入抽象基类
2,变化的行为抽象基类为,所有可变变化的父类
3,用户类的最终实例,通过注入行为实例的方式,设定易变行为
防止了继承行为方式,导致无关行为污染子类。完成了策略封装和可替换性。

(六)工厂模式

应用场景:工厂方式创建类的实例,多与proxy模式配合,创建可替换代理类。
优势:易于替换,面向抽象编程,application只与抽象工厂和易变类的共性抽象类发生调用关系。
敏捷原则:DIP依赖倒置原则
实例:项目部署环境中依赖多个不同类型的数据库时,需要使用工厂配合proxy完成易用性替换
注意事项:项目初期,软件结构和需求都没有稳定下来时,不建议使用此模式,因为其劣势也很明显,
增 加了代码的复杂度,增加了调用层次,增加了内存负担。所以要注意防止模式的滥用。

如果有许多地方都需要生成A的对象,那么你需要写很多A  a=new A()。

如果需要修改的话,你要修改许多地方。但是如果用工厂模式,你只需要修改工厂代码。其他地方引用工厂,可以做到只修改一个地方,其他代码都不动,就是解耦了。

http://wxg6203.iteye.com/blog/740229

转载于:https://www.cnblogs.com/yulang314/p/5240352.html

开发必看 | iOS开发常用设计模式!相关推荐

  1. Linux驱动开发必看详解神秘内核(完全转载)

    Linux驱动开发必看详解神秘内核 完全转载-链接:http://blog.chinaunix.net/uid-21356596-id-1827434.html IT168 技术文档]在开始步入Lin ...

  2. 【珍藏】 2012.NET开发必看资料53个+经典源码77个—下载目录

    2019独角兽企业重金招聘Python工程师标准>>> .NET 是 Microsoft XML Web services 平台.XML Web services 允许应用程序通过I ...

  3. Android开发必看知识,不看后悔

    Android开发必看知识,不看后悔 打包为大家奉上最实用最给力的资源,不看你绝对后悔. 最强大的UI特效 奇艺高清UI界面源代码 http://www.eoeandroid.com/thread-1 ...

  4. 生信小白入门必看网站!常用数据库分享

    新手上路,如何快速了解自己课题,含有DNA.RNA序列等信息的核酸数据库肯定是需要了解滴.今天分享一部分大家会比较常用到的,可结合自己的研究背景挑选使用,主要是应用在组学研究or基因功能研究中. 生信 ...

  5. iOS开发UI篇—IOS开发中Xcode的一些使用技巧

    iOS开发UI篇-IOS开发中Xcode的一些使用技巧 一.快捷键的使用 经常用到的快捷键如下: 新建 shift + cmd + n     新建项目 cmd + n             新建文 ...

  6. 最新仿映客直播APP开发实战项目IOS开发实战8天(最全最新)

    最新仿映客直播APP开发实战项目IOS开发实战8天 第 1 章:直播准备 1: [录播] 课程大纲介绍 09:56 2: [录播] 了解直播技术和腾讯云直播 09:54 3: [录播] 基础封装 23 ...

  7. .NET开发必看资料53个+经典源码77个

    目录0豆下载:http://down.51cto.com/data/426019 附件预览: 基于.net构架的留言板项目大全源码 http://down.51cto.com/zt/70 ASP.ne ...

  8. 【资料目录收藏】.NET开发必看资料53个+经典源码77个

    简单描述:为大家整理了下载中心.net资料,都是比较热的,好评率比较高的,做了一个可收藏的下载目录,希望大家喜欢~ 目录0豆下载: http://down.51cto.com/data/426019 ...

  9. 前端开发必看 | Vue在前端市场这么火,它到底是什么?

    混迹前端市场的大家可能都知道,Vue可以说是一匹黑马,目前github star数已居第一位!前端开发者对Vue使用频率也越来越高. 作为由华人程序员尤雨溪开发的前端构架,它的出身给国人带来了巨大的荣 ...

最新文章

  1. 华为平板电脑_当5G遇上平板电脑,华为MatePad Pro 5G带来了什么?
  2. pandas中df的用法
  3. java变量初始化0.00
  4. 【Python实战】使用python计算多种类型到期还款日
  5. 人机交互大作业_为百亿级未来布局 徐工XG新一代高空作业设备全球首发
  6. 区块链 自私挖矿(selfish mining)是什么
  7. python time datetime模块最详尽讲解
  8. EB开发乱码处理总结
  9. stvd c语言编译器,STM8--STVD编译工具安装与程序下载
  10. 实战分享:如何通过黑帽SEO快速获取庆余年这类电视剧流量
  11. python第一次操作ES The client noticed that the server is not Elasticsearch and we do not support this unk
  12. ERROR: Cannot uninstall ‘PyYAML‘. It is a distutils installed project and thus we cannot accurately
  13. 冰箱味道很臭?那你真的该学学这些除臭妙招
  14. Zoned-Storage - 对ZNS块设备进行基准测试
  15. html转换markdownpad,GitHub - negrochn/markdownpad2_toc: MarkdownPad2导出HTML支持[TOC]
  16. STM32学习手记5 BKP后备寄存器、RTC和中断
  17. 天理-数据结构(考研)
  18. 原学而思培优、智联招聘CTO李京峰加盟T3出行
  19. Appstore商店排名前十的威客应用!
  20. 游匣G15新机开箱测评,果然顶配是真香

热门文章

  1. iptables二之防火墙SNAT源地址转换,MASQUERADE地址伪装之DNAT目标地址转换讲解和实验演示...
  2. 多代理集群调度:可伸缩性和灵活性
  3. 什么是对象?——摘自《设计模式精解》(熊节 译,清华大学出版社,2004.12,P20)...
  4. 高端ERP软件市场漫谈:崇洋无罪 自重有理
  5. 我们靠什么赢得这个时代
  6. [route]Add up route for deb rpm and windows / 为RPM系DEB系和Windows添加路由
  7. Vue CLI 3 脚手架搭建
  8. python基础——变量
  9. 存储过程传入参数与表字段名相同时产生的问题
  10. Oracle电子商务套件版本12.1.3自述文件 (Doc ID 1534411.1)