一、代理模式

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

  优势:解耦合

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

  实例: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. 【HTML5&CSS3进阶学习02】Header的实现·CSS中的布局

    前言 我们在手机上布局一般是这个样子的: 其中头部对整个mobile的设计至关重要,而且坑也很多: ① 一般来说整个header是以fixed布局,fixed这个产物在移动端来说本身坑就非常多 ② 在 ...

  2. Wrong list

    1.背包dp[i][j]无论当前物品是否不大于j都可以转移dp[i-1][j] 2.循环从0开始还是1开始的问题 3.无向图边集数组开两倍 4.(3*987654321) > maxint 4. ...

  3. 改变bootstrap-wysiwyg样式(如hide()show()等),上传图片失效

    最近在试验bootstrap-wysiwyg鱼easyui的整合,两者的兼容性,可以说是基本不兼容... 但是由于需求摆在那里,再大的困难也得克服. 比如像是将bootstrap-wysiwyg放入e ...

  4. Android:控件AutoCompleteTextView 自动提示

    在文本框中输入,要这样的提示效果,如果你输入的是aac,在输入aa后,选择aac,文本框的内容会自动补齐,输入aac(类似百度搜索文本框的显示结果)   <AutoCompleteTextVie ...

  5. 关于JavaScript设计模式(一)

    以后都在简书写文章了,所以这个转载我在简书中写的.地址这里 http://www.jianshu.com/p/c7b3c2c148c5

  6. nexus的使用

    一.在百度网盘或官网下载nexus,并部署.   注意修改: https://repository.apache.org/content/repositories/releases/    二.下载m ...

  7. C#多线程 线程的启动

    在实例化Thread的实例,需要提供一个委托,在实例化这个委托时所用到的参数是线程将来启动时要运行的方法.在.net中提供了两种启动线程的方式,一种是不带参数的启动方式,另一种是带参数的启动的方式. ...

  8. QML杂记

    1.QML编写可视化元素,运行后程序窗口上无显示.检查电脑的显卡是否支持OpenGL,如果支持请更新显卡驱动. 2.加载图片显示QML Image: Cannot open.解决在qml.qrc右击添 ...

  9. Python之Web框架

    Python之Web框架: 一.  Web框架的本质: 对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. #!/usr/bin/env pyth ...

  10. 【日记】thinkphp项目阿里云ECS服务器部署

    项目本地开发告一段落.准备上传到服务器上测试 技术组成 thinkphp+mysql+阿里ECS  代码管理方式git 一.阿里ECS服务器配置 1.因为线上已经有几个站点了.所以要配置ngnix多站 ...