一、代理模式

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

  优势:解耦合

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

  实例: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. C# 反射研究

    概念 反射这东西,对于我这种小白,听起来总是觉得好大上的. 当初理解它费了一点时间,后来看了一句话,突然恍然大悟,“反射就跟B超一样,我们在不剖开人体的情况下想看清楚内部情况, 我们就通过发射超声波, ...

  2. D2js 的邦联式架构

    d2js 的接口单独看有点像小手工业者,每个人摆弄着自己的小功能,但是在 update 的一声号令下,它们也可以组合起来,发挥出整体的功效,变为流水线上的工人--这一切是自然而隐蔽的进行的,小手工业者 ...

  3. Lamda表达式使用

    public class Lambda { public static void main(String[] args) { Lambda lambda=new Lambda(); String so ...

  4. rpc-1-OSI模型

    rpc-1-OSI模型 第一部分,网络7层协议 1. OSI模型: 开放通信系统互联网参考模型,是国际标准化组织(ISO),提出的一个,试图使各种计算机在世界范围内互连为网络的模式.(遵循这个模式,计 ...

  5. 在JaveWeb项目中配置Spring 匿名访问时,匹配规则的变相实现/*

    实现/* /** * 根据当前的URL返回该url的角色集合. * 1.如果当前的URL在匿名访问的URL集合当中时,在当前的角色中添加匿名访问的角色(SysRole.ROLE_CONFIG_ANON ...

  6. sss

    function handleTouchEvent(event) {    if (event.touches.length == 1) {        var output = document. ...

  7. (原创)RecyclerView结合xUtils2.6实现滚动时不加载item,xUtils2.6的源码分析与改造

    我们知道xUtils中的bitmapUtils与listview相配合可以实现滚动时暂停加载 只需要一句话: listview.addOnScrollListener(new PauseOnScrol ...

  8. 用遗传算法GA改进CloudSim自带的资源调度策略(2)

    遗传算法GA的核心代码实现: 最核心: private static ArrayList<int[]> GA(ArrayList<int[]> pop,int gmax,dou ...

  9. infoq 微信后台存储架构

    infoq 上微信后台存储架构 视频很是值得认真一听,大概内容摘要如下: 主要内容:同城分布式强一致,园区级容灾KV存储系统 - sync 序列号发生器      移动互联网场景下,频繁掉线重连,使用 ...

  10. [Sass]扩展/继承

    [Sass]扩展/继承 继承对于了解 CSS 的同学来说一点都不陌生,先来看一张图: 图中代码显示".col-sub .block li,.col-extra .block li" ...