最近有小伙伴问到在iOS开发中的几种设计模式,这里摘录一下别人的总结(因为已经感觉总结得差不多了,适用的可以阅读一下)

首先是开发中的23中设计模式分为三大类:1.创建型 2.结构型 3.行为型 (iOS常用大概6种)

创建型

1. Factory Method(工厂方法)

2. Abstract Factory(抽象工厂)

3. Builder(建造者)

4. Prototype(原型)

5. Singleton(单例)

结构型

6. Adapter Class/Object(适配器)

7. Bridge(桥接)

8. Composite(组合)

9. Decorator(装饰)

10. Facade(外观)

11. Flyweight(享元)

12. Proxy(代理)

行为型

13. Interpreter(解释器)

14. Template Method(模板方法)

15. Chain of Responsibility(责任链)

16. Command(命令)

17. Iterator(迭代器)

18. Mediator(中介者)

19. Memento(备忘录)

20. Observer(观察者)

21. State(状态)

22. Strategy(策略)

23. Visitor(访问者)


一、代理模式

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

  优势:解耦合

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

  实例:tableview的 数据源delegate,通过和protocol的配合,完成委托诉求。

  列表row个数delegate

  自定义的delegate

二、观察者模式

  应用场景:一般为model层对,controller和view进行的通知方式,不关心谁去接收,只负责发布信息。

  优势:解耦合

  敏捷原则:接口隔离原则,开放-封闭原则

  实例:Notification通知中心,注册通知中心,任何位置可以发送消息,注册观察者的对象可以接收。

  kvo,键值对改变通知的观察者。

三、MVC模式(我感觉MVC应该不是归类到设计模式)

  应用场景:非常古老的设计模式,通过数据模型,控制器逻辑,视图展示将应用程序进行逻辑划分。

  优势:使系统,层次清晰,职责分明,易于维护

  敏捷原则:对扩展开放-对修改封闭

  实例:model-即数据模型,view-视图展示,controller进行UI展现和数据交互的逻辑控制。

四、单例模式

  应用场景:确保程序运行期某个类,只有一份实例,用于进行资源共享控制。

  优势:使用简单,延时求值,易于跨模块

  敏捷原则:单一职责原则

  实例:[UIApplication sharedApplication]。

  注意事项:确保使用者只能通过 getInstance方法才能获得,单例类的唯一实例。

  java,C++中使其没有公有构造函数,私有化并覆盖其构造函数。

  object c中,重写allocWithZone方法,保证即使用户用 alloc方法直接创建单例类的实例,

  返回的也只是此单例类的唯一静态变量。

五、策略模式(使用较少)

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

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

  敏捷原则:接口隔离原则;多用组合,少用继承;针对接口编程,而非实现。

  实例:排序算法,NSArray的sortedArrayUsingSelector;经典的鸭子会叫,会飞案例。

  注意事项:   1,剥离类中易于变化的行为,通过组合的方式嵌入抽象基类

        2,变化的行为抽象基类为,所有可变变化的父类

        3,用户类的最终实例,通过注入行为实例的方式,设定易变行为

  防止了继承行为方式,导致无关行为污染子类。完成了策略封装和可替换性。

六、工厂模式

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

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

  敏捷原则:DIP依赖倒置原则

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

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

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


iOS 开发中常见的设计模式的更多相关文章

  1. Android开发中常见的设计模式 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  2. iOS开发中常见的一些异常

    iOS开发中常见的异常包括以下几种NSInvalidArgumentExceptionNSRangeExceptionNSGenericExceptionNSInternallnconsistency ...

  3. iOS开发中的MVC设计模式

    我们今天谈谈cocoa程序设计中的 模型-视图-控制器(MVC)范型.我们将从两大方面来讨论MVC: 什么是MVC? M.V.C之间的交流方式是什么样子的? 理解了MVC的概念,对cocoa程序开发是 ...

  4. Android开发中常见的设计模式

    对于开发人员来说,设计模式有时候就是一道坎,但是设计模式又非常有用,过了这道坎,它可以让你水平提高一个档次.而在android开发中,必要的了解一些设计模式又是非常有必要的.对于想系统的学习设计模式的 ...

  5. iOS开发中常见的语句@synthesize obj = _obj 的意义详解

    我们在进行iOS开发时,经常会在类的声明部分看见类似于@synthesize window=_window; 的语句,那么,这个window是什么,_ window又是什么,两个东西分别怎么用,这是一 ...

  6. iOS开发中常见的语句@synthesize obj=obj的意义详解

    我们在进行iOS开发时,经常会在类的声明部分看见类似于@synthesize window=_window; 的语句,那么,这个window是什么,_ window又是什么,两个东西分别怎么用,这是一 ...

  7. iOS开发中常见bug!(内附解答方法)

    序言 你是否曾经修复了一个 bug ,随后又发现了一个跟刚修复 bug 有关的 bug ,又或是修复 bug 的方式引起了另一个 bug ? 然而这些问题是绝佳的学习机会.所以我们怎样尽可能多地从修复 ...

  8. Android开发中常见的设计模式(一)——单例模式

    首先了解一些单例模式的概念. 确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例. 这样做有以下几个优点 对于那些比较耗内存的类,只实例化一次可以大大提高性能,尤其是在移动开发中. 保持 ...

  9. Android开发中常见的设计模式(二)——Builder模式

    了解了单例模式,接下来介绍另一个常见的模式--Builder模式. 那么什么是Builder模式呢.通过搜索,会发现大部分网上的定义都是 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建 ...

随机推荐

  1. django 自定义标签

    Context和RequestContext都能被Template 进行render RequestContext类接受reqest,字典,processors 实例化.并被TEMPLATE_CONT ...

  2. (转载)MVC + JQUERY + AJAX的几种方式

    MVC + JQUERY + AJAX的几种方式 // 传过去一个简单值,获取一个简单值 $.ajax({            type: "GET",         url: ...

  3. Axure草记

    页面控件和DataSet绑定,DataSet和输入控件绑定(通过临时变量) 双击Repeater进入之后,你会发现下面已经默认添加了3行,这代表着,每增加一行将会重复3遍: Repeater可以只是部 ...

  4. 50个实用的jQuery代码段让你成为更好的Web前端工程师

    本文会给你们展示50个jquery代码片段,这些代码能够给你的javascript项目提供帮助.其中的一些代码段是从jQuery1.4.2才开始支持的做法,另一些则是真正有用的函数或方法,他们能够帮助 ...

  5. Linux ln命令 - 建立文件/目录链接

    转自Linux ln命令 - 建立文件/目录链接 1. 使用方式:ln [option] source_file dist_file                     -f 建立时,将同档案名删 ...

  6. android recovery模式及ROM制作

    转自android recovery模式及ROM制作 1.总述 为了方便客户日后的固件升级,本周研究了一下android的recovery模式.网上有不少这类的资料,但都比较繁杂,没有一个系统的介绍与 ...

  7. Eclipse下设置github开发环境

    1.按照github上的指南配置(http://help.github.com/win-set-up-git/)基础的git环境. 2.在github上创建一个Repository. 3.在Eclip ...

  8. 怎么清除SVN密码,以及重置eclipse中svn插件密码

    如何清除SVN密码,以及重置eclipse中svn插件密码? 清除SVN客户端密码方法: 邮件选择TortoiseSVN中的settings选项---Saved Data---右边会发现有个Authe ...

  9. [转贴]gsoap使用心得!

    最近换了个工作环境,现在在大望路这边上班,呵,刚上班接到的任务就是熟悉gsoap!废话少说,现在开始gSoap学习! gSOAP是一个夸平台的,用于开发Web Service服务端和客户端的工具,在W ...

  10. SPRING IN ACTION 第4版笔记-第三章ADVANCING WIRING-004-消除bean自动装配的歧义@Primary

    一. 假设有如下三个类实现同一个接口,则自动装配时会产生歧义 @Component public class Cake implements Dessert { ... } @Component pu ...