一、代理模式

  应用场景:当一个类的某些功能需要由别的类来实现,但是又不确定具体会是哪个类实现。

  优势:解耦合

  敏捷原则:开放-封闭原则

  实例: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完成易用性替换

  注意事项:项目初期,软件结构和需求都没有稳定下来时,不建议使用此模式,因为其劣势也很明显,

  增 加了代码的复杂度,增加了调用层次,增加了内存负担。所以要注意防止模式的滥用。

ps:

设计模式的基本原则:
开闭原则
里氏代换原则
依赖倒转原则
接口隔离原则
合成/聚合复用

iOS设计模式的更多相关文章

  1. IOS设计模式之一(MVC模式,单例模式)

    iOS 设计模式-你可能已经听说过这个词,但是你真正理解它意味着什么吗?虽然大多数的开发者可能都会认为设计模式是非常重要的,然而关于设计模式这一主题的文章却不多,并且有时候我们开发者在写代码的时候也不 ...

  2. iOS 设计模式之工厂模式

    iOS 设计模式之工厂模式 分类: 设计模式2014-02-10 18:05 11020人阅读 评论(2) 收藏 举报 ios设计模式 工厂模式我的理解是:他就是为了创建对象的 创建对象的时候,我们一 ...

  3. iOS设计模式之生成器

    iOS设计模式之生成器 1.生成器模式的定义 (1): 将一个复杂的对象的构件与它的表示分离,使得相同的构建过程能够创建不同的表示 (2): 生成器模式除了客户之外还包括一个Director(指导者) ...

  4. IOS设计模式之三:MVC模式

    IOS设计模式之三:MVC模式   模型-视图-控制器 这个模式其实应该叫做MCV,用控制器把model与view隔开才对,也就是model与view互相不知道对方的存在,没有任何瓜葛,他们就像一个团 ...

  5. iOS设计模式 - 享元

    iOS设计模式 - 享元 原理图 说明 享元模式使用共享物件,用来尽可能减少内存使用量以及分享资讯给尽可能多的相似物件:它适合用于只是因重复而导致使用无法令人接受的大量内存的大量物件.通常物件中的部分 ...

  6. iOS设计模式 - 责任链

    iOS设计模式 - 责任链 原理图 说明 在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链.请求在这个链上传递,直到链上的某一个对象决定处理此请求.发出这个请求的客户端并不知道链 ...

  7. iOS设计模式 - 模板

    iOS设计模式 - 模板 原理图 说明 定义一个操作中的算法的骨架,而将步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重定义算法的某些特定步骤. 源码 https://github.c ...

  8. iOS设计模式 - 访问者

    iOS设计模式 - 访问者 原理图 说明 表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作. 1.Visitor 抽象访问者角色,为该对象结构中具 ...

  9. iOS设计模式 - 迭代器

    iOS设计模式 - 迭代器 原理图 说明 提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示. 源码 https://github.com/YouXianMing/iOS-Des ...

  10. iOS设计模式 - 中介者

    iOS设计模式 - 中介者 原理图 说明 用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互. 注:中介者对象本身没有复用价值 ...

随机推荐

  1. 关于编写性能高效的javascript事件的技术

    如何能做出高效的web前端程序是我每次做前端开发都会不自觉去考虑的问题.几年前雅虎里牛逼的前端工程师们出了一本关于提升web前端性能的书籍,轰动了整个web开发技术界,让神秘的web前端优化问题成为了 ...

  2. Spring 的动态数据源实现

    1. 配置多个数据源 这里以两个c3p0数据库连接池的数据源作为实例.在Spring框架下使用c3p0的数据库需要加入c3p0-0.9.1.2.jar(现在最新的)这个支持包.这里以数据同步项目为例: ...

  3. Django 1.7 Tutorial 学习笔记

    官方教程在这里 : Here 写在前面的废话:)) 以前学习新东西,第一想到的是找本入门教程,按照书上做一遍.现在看了各种网上的入门教程后,我觉得还是看官方Tutorial靠谱.书的弊端一说一大推 本 ...

  4. Linux命令-自动挂载文件/etc/fstab功能详解[转]

    一./etc/fstab文件的作用 磁盘被手动挂载之后都必须把挂载信息写入/etc/fstab这个文件中,否则下次开机启动时仍然需要重新挂载. 系统开机时会主动读取/etc/fstab这个文件中的内容 ...

  5. Matlab与Windows桌面提醒

    最近在实验室用Matlab做实验,一次训练下来最少得也得5到10分钟吧.在Matlab运行的过程中,又不太好去做别的事情,因为5到10分钟的时间实在有点短.但是,眼睁睁看着代码的运行的话,5分钟又实在 ...

  6. 虚拟机NAT网络配置

    今天虚拟机NAT模式配置网络遇到一个奇葩问题.主机能ping同虚拟机时,虚拟机不能ping同主机.相反虚拟机ping通主机时,主机ping不通虚拟机. 最后花了一个小时,终于可以互通了,做一个记录: ...

  7. Webstorm 2016.3激活码

    webstorm 2016.3 可用激活码, 使用activation code方式激活 就这么任性,就这么长 43B4A73YYJ-eyJsaWNlbnNlSWQiOiI0M0I0QTczWVlKI ...

  8. 报错注入分析之updatexml注入

    PS:今天元旦,家里打来电话说,今年春节要回老家.心里倍感恐惧.可以清楚的感觉得到父母说话的气息没有底气.大概如同我一样是恐惧吧.加油吧!努力赚钱! 先丢一篇很不错的文章:http://www.moo ...

  9. bzoj violet系列 (2708~2725)

    cbh大爷说:写博客不能弃坑. orz cbh 那我就来更新博客了. violet这个系列的题好神啊……出题人好劲啊…… ……怎么最近都在理性愉悦啊…… 另外bzoj400题纪念~ 2708: [Vi ...

  10. yii2——自定义widget

    参考资料:http://www.bsourcecode.com/yiiframework2/how-to-create-custom-widget-in-yii2-0-framework/   如何使 ...